1

在我的 html 中,我有 2 个外部 css 文件

externalCSSContents = [];

function getExternalCSSContents(){
    var i, href;
    for (i=0; i < document.styleSheets.length; i++)
    {
        href = document.styleSheets[i].href;
            if (href != null)
            {  
                $.ajax({
                    async: false,
                    url: href, 
                    success: function (data) { 
                        externalCSSContents.push(data);
                    }
                });
            }
    }

}
getExternalCSSContents();
alert(externalCSSContents.length);

并且此代码有时在 Firefox 中警告 1,但在其他浏览器中永久警告 2。出了什么问题,我该如何解决?
[Edit] href 有时 = null in ff
[Edit2]我明白了,很抱歉我没有提到附加的 prefixfree.min.js。有了这个库,document.styleSheets[i].href 就像在没有它的 Chrome 中一样在 FireFox 中工作。( Сhrome 不支持 document.styleSheets )。谢谢大家的回答,再次为我的疏忽感到抱歉。

4

2 回答 2

2

Another victim of AJAX. AJAX stands for Asynchronous JavaScript and XML. The first part is in place here (Asynchronous ).

It could be that the AJAX call is not finished before reaching the alert. You can use a callback to be called when you AJAX function is finished.

externalCSSContents = [];

function getExternalCSSContents(callback){
    var i, href;
    for (i=0; i < document.styleSheets.length; i++)
    {
        href = document.styleSheets[i].href;
            if (href != null)
            {  
                $.ajax({
                    url: href, 
                    success: function (data) { 
                        externalCSSContents.push(data);
                        callback();
                    }
                });
            }
    }

}
getExternalCSSContents(downloadReady);

function downloadReady() {
    alert(externalCSSContents.length);
}
于 2012-04-13T15:36:57.523 回答
0

尝试将警报移动到成功功能中,您可能会遇到竞争情况。您希望警报等到 AJAX 调用完成。

于 2012-04-13T15:30:59.493 回答