2012-07-20 42 views
5

我想使用Head JS來爲我的頁面動態加載所有其他腳本。我打算使用由CDNJS託管的版本來利用更好的緩存,減少的延遲等優勢。如何使用本地回退加載JavaScript中的本地回退

我沒有理由認爲CDNJS會去任何地方,但即使對於像谷歌CDN託管的文件,如jQuery,我喜歡包括後備。但是,當我使用jQuery時,這些文件包含在<body>標記的末尾。由於Head JS的性質,我需要將其包含在我的頁面的<head>中。

<body>我會用兩行這樣的:

<script src="http://cdnjs.cloudflare.com/ajax/libs/headjs/0.96/head.min.js"></script> 
<script> window.head || document.write('<script src="js/libs/head-0.96.min.js"><\/script>') </script> 

我可以使用相同的套系在頭上作爲備用? document.write()會不會覆蓋我的整個頁面?由於瀏覽器解析DOM的順序,當腳本存在於<head>中時,腳本加載的方式不同嗎?

我對這個還很新,所以任何指導都會非常有幫助!謝謝!

+1

document.write只會在完成頁面加載後嘗試完成後破壞文檔。一個內嵌的document.write將作爲頁面的加載/解析執行,只需將寫入的數據原樣插入到文檔中即可。 – 2012-07-20 17:07:49

+0

是的,但是不會在頭文件中加載調用'中的_before_腳本,該腳本是從document.write中加載的? – stevenem 2012-07-20 17:55:33

+0

只有當您將以前的腳本標記標記爲'async'時。否則,腳本會同步加載。 – 2012-07-20 18:40:33

回答

0

正如你可能已經知道的,你將不會測試window.jQuery,但head.js中包含一些函數。

此外,你是對的,你可能不想在這裏兩次使用document.write()

代替document.write(),試試這個:

function appendScript(url) { 
    var head = document.getElementsByTagName('head')[0]; 
    var theScript = document.createElement('script'); 
    theScript.type = 'text/javascript'; 
    theScript.src = url; 
    theScript.onreadystatechange = callback; 
    theScript.onload = callback; 
    head.appendChild(theScript); 
} 

對於URL,使用本地備用。

+0

感謝您指出jQuery部分!我會給這個一杆!如何在Head JS加載後設置回調來運行'head.js()'命令? – stevenem 2012-07-20 19:08:36

+0

我不確定,我對head.js不甚瞭解,但我不知道是否可以保證這樣做可以在head.js設計之前或之後運行。 – 2012-07-20 20:32:29