2012-04-13 5 views
1

は、私は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を警告しています。何が間違っていて、どうすれば解決できますか?
[編集]のhref =時々ヌルFF
で[EDIT2]私は、私が添付prefixfree.min.jsについては言及しなかったことを残念に理解しました。そして、このライブラリでは、document.styleSheets [i] .hrefは、FireFoxを使わないでChromeのようにFireFoxで動作していました。 (document.styleSheetsはСromeによってサポートされていません)。あなたの答えに感謝し、私の不注意にもう一度申し訳ありません。

+1

コードがグローバルにリークしています。あなたは 'var i、href;'を関数の先頭に置いて修正することができます。 – ThiefMaster

+0

@ThiefMaster:あなたは 'var i、href;'を意味すると思います。 ;) –

+1

コードをステップ実行しましたか?なぜそれは警告1ですか?それはループを二度通過しているのですが、配列に一つだけ置いているのですか、それともループしていますか? document.styleSheets.lengthなどによって返されるもの –

答えて

0

アラートを成功関数に移動すると、競合状態になることがあります。 AJAXコールが終了するまでアラートを待機させたいとします。

+1

時には呼び出しがブロックされる。 –

2

もう1人の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); 
} 
+2

'async:false'を除いて –

関連する問題