在Doctype声明之前添加脚本标记

时间:2013-11-24 15:33:49

标签: javascript html

我刚做了一点测试,如果我按照下面说明的方式添加脚本,它似乎在大多数现代主流浏览器中执行。它在页面加载之前执行,我想知道这是否适用于所有浏览器(包括历史性的)?

<script type="text/javascript">
alert("hello world");
</script>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
</body>
</html>

我当然试图找到一种方法来执行一个脚本来设置一个页面,然后加载任何一个页面......为此目的的任何输入将不胜感激。使用这种方法会有误吗?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:4)

脚本被执行,但是标记(DOCTYPE字符串之前的任何元素)将一些浏览放到quirks mode,这意味着大量记录不清的怪癖和怪异,以及混乱。

所以无论你的理由是什么,你至少应该把元素放在第一个语法正确的位置,即在<head>标签之后。与将其放在文档的开头相比,这几乎无关紧要。

展示位置是否解决了您的真正问题是完全不同的事情。你应该问一个单独的问题,清楚地描述问题(而不是一个假设的解决方案),最好通过一些证明问题的代码说明。

答案 1 :(得分:3)

根据specs

  

HTML语法中的符合性文档必须包含以下内容   部分,按以下顺序

     
      
  1. 可选,单个U + FEFF BYTE ORDER MARK(BOM)字符。
  2.   
  3. 任意数量的评论和空格字符。
  4.   
  5. 文档类型
  6.   
  7. 任意数量的评论和空格字符。
  8.   
  9. 一个html元素,包含其属性(如果有)及其内容(如果有)。
  10.   

浏览器遵循这些规范,您的代码(即使现在可以正常工作)可能会在将来中断,因为 它明显打破了元素秩序的规则。

其次,load the scripts last的性能提升几乎总是更好。

答案 2 :(得分:2)

您在评论中提到要在显示页面之前隐藏/显示元素,并且onload太慢。尝试使用DOMContentLoaded,而不是在构建HTML DOM之后但在加载所有图像CSS和其他外部引用之前触发它。

这一直对我有用 - 虽然我使用jQuery的ready事件使其跨浏览器工作。它可以保证您的HTML有效。