拥有以下代码:
<html>
<head>
<script>
function elem_onload() {
console.log("elem_onload");
};
</script>
</head>
<body onload="elem_onload()">
<script type="text/javascript" src="script.js" defer></script>
</body>
</html>
的script.js:
console.log("external script");
defer属性似乎不起作用。输出是:
external script
elem_onload
是否带有延迟属性。 Shoudn&#ttt
elem_onload
external script
是否定义了延迟?
我想说明我的答案不是
的重复How exactly does <script defer=“defer”> work?
引用的推荐答案是内联脚本,浏览器行为对我来说很明显 - 它只是忽略defer
。我的问题是关于外部脚本,在这种情况下,浏览器应该执行外部延迟脚本
解析文档后
因为文档在onload
事件后声明。
所以我等着得到合适的答案......
答案 0 :(得分:4)
defer
属性延迟的外部脚本在触发(DOMContentLoaded
)之前执行,即初始HTML文档已完全加载和解析时。另一方面,onLoad
标记上的<body>
属性仅在网页完全加载时触发。
因此,defer属性确实有效。您可以通过尝试以下两种情况来测试它。在这两种情况下, script.js 文件的内容应为:
console.log(document.getElementById('sample').innerHTML);
CASE 1 HTML - defer
- &gt;记录&#34;示例文本&#34;
<body onLoad="elem_onload()">
<script type="text/javascript" src="script.js" defer></script>
<div id="sample">Sample text</div>
</body>
案例2 HTML - 没有defer
- &gt;记录错误
<body onLoad="elem_onload()">
<script type="text/javascript" src="script.js"></script>
<div id="sample">Sample text</div>
</body>
答案 1 :(得分:-1)
THX。一切都是为了帮助。
所以语句&#34; ...在文档被解析之后&#34;来自原始文件。 (MDN <script> tag) 从12.2.6 The end
开始说步骤#0当文档被完全解析时,现在有几个任务需要完成。这些任务包括运行外部延迟脚本
是事先(#3)到onload
事件。
我是对的吗?