2011-11-02 76 views
3

這似乎是一個簡單的問題來解決,但它是踢我的屁股。IE9 js加載順序和jQuery

以下簡單示例在IE9中產生錯誤。我已經使用IE9的開發者頁面來監視網絡加載,並且它看起來像IE在加載/評估包含的JavaScript之前加載並執行主體的腳本。

我已經嘗試了所有通過尋找問題的答案,包括添加<meta charset="UTF-8" /><meta http-equiv="x-ua-compatible" content="IE8"/>

<html> 
<head> 
    <title>Demo of IE suckiness</title> 
    <script type='text/javascript' 
     src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js'></script> 
    </head> 
    <body> 
This works in every browser but not IE9. IE gives the error: 
<pre> 
Line: 9 
Error: The value of the property '$' is null or undefined, not a Function object 
</pre> 

<script type="text/javascript" defer="defer"> 
$(document).ready(function(){ 
    alert("Must not be IE"); 
}); 
</script> 
</body> 
</html> 

發現我有一個變通的各種技巧。將準備好的腳本移動到<body onload="ready()">,但我不能相信這對IE9來說是破壞的,我一定是做錯了什麼,只是看不到它。

+1

爲什麼使用「延遲」? $(document).ready表示它將在文檔加載時執行。 –

+0

你可以驗證正在下載jQuery庫嗎?也許http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js由於某種原因被阻止。 – fehays

+0

我驗證了它正在被下載。問題是在頁面的腳本運行之前它沒有被加載。 「推遲」是一個瘋狂的嘗試讓它不首先加載。我只是沒有道理。 下面的解決方案是重置我所有的IE設置。我必須改變安全設置或什麼?它只是沒有意義,IE會下載,但不加載JQuery。 – TrophyGeek

回答

2

我有類似的問題。我通過resetting all my IE9 settings修復了它。
我認爲通過啓動安全或隱私它可以打破外部頁面的jquery加載。

+0

哇。好。這工作!你怎麼知道甚至嘗試它?我一直在這上面花費數小時。當然,我在我的本地服務器(本地主機)上運行它,並嘗試從localhost路徑加載jquery,但沒有任何工作。 – TrophyGeek

0

您試過忽略defer="defer"

+1

如果這是一個答案,爲什麼它是一個問題? :D –

+0

感謝您的想法。我確實嘗試了這種組合。 – TrophyGeek

0

我有同樣的問題,並通過不使用谷歌託管jQuery和本地託管它解決了它。

+0

問候詹姆斯。歡迎來到Stackoverflow。您可以爲已經回答的問題提供答案。沒有問題。精神是分享社區成員之間的不同體驗。花些時間閱讀FAQ。 –

3

據我所知,當整個文檔(包括所有圖像&相關的東西)已被加載時,IE9只會觸發$ .load()。可怕但真實!我對這種解決方法:

  var docReady = { 
       actions:new Array(), 
       flag:0, 
       time:0, 
       period:10, 
       trigger:function() {this.flag=1}, 
       checkHandle:0, 
       check:function() { 
        this.time+=this.period; 
        if(this.flag) { 
         clearInterval(this.checkHandle); 
         for(i in this.actions) {this.actions[i]();} 
        } 
       }, 
       watch:function() { 
        this.checkHandle = setInterval(function() {docReady.check();},this.period); 
       }, 
       action:function(f) { 
        this.actions.push(f); 
       } 

      }; 

      docReady.watch(); 

一葷一的確但它的工作;現在只要你覺得合適,你可以打電話給docReady.trigger(),你至少應該在頁面末尾做。此外,您可以將其稱爲正文onload。這可以保證你用docReady.action()添加的函數只會運行一次:第一個觸發器()發生時。