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 を警告します。何が問題で、どうすれば解決できますか?
[編集] ff で href 時々 = null [編集
2]わかった、添付の prefixfree.min.js について言及していなくてすみません。そして、このライブラリ document.styleSheets[i].href を使用すると、それがなくても Chrome のように FireFox で動作していました。( document.styleSheets は Сchrome ではサポートされていません)。ご回答いただきありがとうございます。また、私の不注意をお詫び申し上げます。

4

2 に答える 2

2

AJAX の別の被害者。AJAX は Asynchronous JavaScript and XML の略です。最初の部分はここにあります (非同期)。

アラートに到達する前に AJAX 呼び出しが終了していない可能性があります。AJAX 関数が終了したときに呼び出されるコールバックを使用できます。

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 に答える