2009-12-03 47 views
0

有沒有在這兩個片段的任何區別:以下JavaScript代碼段有什麼區別嗎?

在HTML年底寫這個片段// where should we write the script anyways, is it inside body tag or just after body tag.

<script type="text/javascript"> 
insertNavigation(); // any arbitrary method 
</script> 

或者在HTML

<script type="text/javascript"> 
if (window.addEventListener){ 
    window.addEventListener('load', insertNavigation, false); 
} else if (window.attachEvent){ 
    window.attachEvent('onload', insertNavigation);  
} 
</script> 

年底寫這個片段兩個片段的輸出是否相同?如果是,那麼應採用哪種方法。如果沒有,那麼如何?

回答

4

有什麼區別嗎?

如果它被放置在您的文檔的末尾,那麼在大多數情況下,他們會是相同的。第一種方法的問題在於,只要遇到並且文檔等待它完成,它就會運行。

應該在哪裏腳本放在哪裏?

general recommendation是,它們被放置在文件的結尾,內部身體。該規範不允許除headbody之外的任何內容直接位於html標籤內。

之所以提出這一建議是因爲幾乎所有的JavaScript是要在文檔加載完成後運行,有沒有點加載,直到最後一刻。如果你把它放在你的文檔開頭,頭部,那麼瀏覽器必須下載你的所有腳本,才能到達內容,這意味着用戶必須坐在空白頁稍微長一點。

建議:

如果你使用任何圍繞這些天共同的JavaScript工具包/庫,他們會經常有一些指定要運行的代碼,一旦頁面已經準備好自己的結構。在jQuery中,例如,那就是:

$(function() { /* code here */ }); 

此外,良好的使用JavaScript的包裝/縮小,高速緩存和gzip壓縮在服務器端將減少把腳本了在頭部的底片,他們通常都放在。儘管如此,它最終還是不會受到傷害。

+0

第二種方法不會覆蓋以前附加的處理程序,FYI。 – 2009-12-05 06:37:31

+0

感謝新月,現在更新。 – nickf 2009-12-06 03:55:51

1

有一個主要的區別,代碼插入<script>標記將阻止瀏覽器呈現,直到代碼執行,即使瀏覽器會使用負載渲染一切,並執行你的代碼,這是更好的恕我直言。

而且使用你是不是第一種方法,如果你確信你可以安全地操作DOM您需要將訪問的所有DOM元素,帶負載的方法。

在構建非侵入式javascript方面,第二種方法更好,因爲它可以在任何地方工作,腳本應該依賴於id等插入一些內容。

+0

'也使用第一種方法,如果所有您需要的DOM元素都是可訪問的,那麼您就不會獲得這一行嗎? – 2009-12-03 06:33:25

+0

@Rakesh:對不起,我的措辭也許不是最好的,我的意思是如果使用第一種方法,你不確定你將在文檔中訪問什麼,如果你使用load事件,整個文檔將被正確解析並可訪問。 – RageZ 2009-12-03 06:39:57