我刚做了一点测试,如果我按照下面说明的方式添加脚本,它似乎在大多数现代主流浏览器中执行。它在页面加载之前执行,我想知道这是否适用于所有浏览器(包括历史性的)?
<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>
我当然试图找到一种方法来执行一个脚本来设置一个页面,然后加载任何一个页面......为此目的的任何输入将不胜感激。使用这种方法会有误吗?
提前感谢您的帮助!
答案 0 :(得分:4)
脚本被执行,但是标记(DOCTYPE字符串之前的任何元素)将一些浏览放到quirks mode,这意味着大量记录不清的怪癖和怪异,以及混乱。
所以无论你的理由是什么,你至少应该把元素放在第一个语法正确的位置,即在<head>
标签之后。与将其放在文档的开头相比,这几乎无关紧要。
展示位置是否解决了您的真正问题是完全不同的事情。你应该问一个单独的问题,清楚地描述问题(而不是一个假设的解决方案),最好通过一些证明问题的代码说明。
答案 1 :(得分:3)
根据specs,
HTML语法中的符合性文档必须包含以下内容 部分,按以下顺序:
- 可选,单个U + FEFF BYTE ORDER MARK(BOM)字符。
- 任意数量的评论和空格字符。
- 文档类型。
- 任意数量的评论和空格字符。
- 一个html元素,包含其属性(如果有)及其内容(如果有)。
醇>
浏览器遵循这些规范,您的代码(即使现在可以正常工作)可能会在将来中断,因为 它明显打破了元素秩序的规则。
其次,load the scripts last的性能提升几乎总是更好。
答案 2 :(得分:2)
您在评论中提到要在显示页面之前隐藏/显示元素,并且onload
太慢。尝试使用DOMContentLoaded
,而不是在构建HTML DOM之后但在加载所有图像CSS和其他外部引用之前触发它。
这一直对我有用 - 虽然我使用jQuery的ready
事件使其跨浏览器工作。它可以保证您的HTML有效。