2009-12-03 46 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