JavaScript推迟

时间:2011-04-19 19:03:47

标签: javascript head deferred placement

在关闭<script>代码之前放置<body>代码,将它们放在<head>部分并指定defer="defer"属性吗?

谢谢。

3 个答案:

答案 0 :(得分:2)

是/否。

是的,因为在执行之前放置defer标签会等到文档加载完毕。

否,因为在<script>标记之前放置</body>并不一定意味着文档已完全加载,因为您可以在结束正文标记和结束HTML标记之间添加其他标记。实施例

<html>
  <head>
  </head>
  <body>
  <script>...</script>
  </body>
  <link/>
  <script>
  although it is invalid HTML most browsers will render tags outside the body. This is 
  probably more of an error in code
  <div> some content</div>
</html>

另外值得注意的是,脚本标记的defer属性在所有浏览器中都不起作用。

已编辑:

关于更快加载页面的性能,您可能希望查看本文,它提供了一些指导,包括将脚本和css放在何处

http://developer.yahoo.com/performance/rules.html

答案 1 :(得分:1)

  

延迟需要Gecko 1.9.1这个   布尔属性设置为指示   到脚本的意思的浏览器   在文件发布后执行   已被解析。由于此功能没有   但是已经被所有其他人实施了   主流浏览器,作者不应该   假设脚本的执行   实际上会被推迟。从不打电话   来自延迟脚本的document.write()   (从Gecko 1.9.2开始,这将会受到打击   离开文件)。推迟   不应在脚本上使用该属性   没有src属性。   从Gecko 1.9.2开始,defer属性   在没有的脚本上被忽略   src属性。但是,在Gecko   1.9.1如果设置了defer属性,则甚至内联脚本也会延迟。

当文档完成解析并且<body>标记的末尾相似但不完全相同时。

同样重要的是要注意,这仅适用于具有外部src设置的脚本。

答案 2 :(得分:1)

通常是的,但浏览器并不保证他们在加载页面后会执行JavaScript,除非你指定(defer =“defer”)。