2012-02-07 126 views
4

目前,我通過Amazon Cloudfront將所有javascripts合併到一個大文件中。但由於jQuery非常龐大,我正在考慮使用Google提供的版本。當然,如果我沒有閱讀這篇文章,我會在頁面底部包含兩個腳本標記,並添加延遲屬性:http://hacks.mozilla.org/2009/06/defer/腳本延遲可靠嗎?

如果我理解正確,defer屬性只能在Firefox中正常工作,而其他瀏覽器(當時)會以隨機順序執行腳本。真的嗎?當然,我的腳本依賴於jQuery,所以它必須在我的腳本之前執行。

+0

有趣。我從來沒有聽說過它只適用於Fx,au contraire。 PPK建議'defer'在IE4 +和舊版瀏覽器中的工作方式不同,但並未提及它在其他瀏覽器中無法使用。他的文章可能有點老,雖然... http://www.quirksmode.org/js/placejs.html – Nix 2012-02-07 12:06:39

+0

有很多很好的資源鏈接在這個SO問題:http://stackoverflow.com/questions/5250412/how-exactly-does-script-defer-defer-work – Nix 2012-02-07 12:41:56

+0

爲什麼你首先需要'defer'?你將所有的文件放在頁面的底部,你應該總是通過'$(function(){/ * ... your code .. * /})來使用jQuery;',所以沒有問題.. – apfelbox 2012-03-05 17:41:57

回答

0

我不確定如果您不確定是否支持,我會爲延遲而煩惱。只需做到這一點:

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.js"></script> 
<script>window.jQuery || document.write("<script src='localJSFolder/jquery-1.6.4.min.js'></script>")</script> 

所有現代瀏覽器應該順序運行腳本。這是通過本地回退使用Google CDN的最簡單方法。

+0

請注意,您的腳本內嵌的可能在您的html代碼中存在問題。建議將其轉義爲<\/script>。 – 2013-11-17 17:10:04

0

我會(window.load事件真正地表現得像延遲)建議是這樣的:

$(window).load(function() { 
    var script = document.createElement("script"); 
    script.type = "text/javascript"; 
    if (script.readyState) { // IE 
     script.onreadystatechange = function() { 
      if (script.readyState === "loaded" || script.readyState === "complete") { 
       script.onreadystatechange = null; 
       // do something 
      } 
     }; 
    } 
    else { // Others 
     script.onload = function() { 
      // do something (the same thing as above) 
     }; 
    } 
    script.src = file; 
    document.getElementsByTagName("head")[0].appendChild(script); 
}); 

如果你需要一個以上的文件,放在一個循環,並設置文件類似的文件[X ]

0

在2017年,似乎足夠可靠的停止避免這5個字母贊成17班輪解決方法。瀏覽器支持deferquite good these days