【发布时间】:2016-01-12 20:52:31
【问题描述】:
代码如下:
<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
不管有没有defer属性。不应该吗
elem_onload
external script
定义了延迟?
重复的答案!?
我想声明我的答案与
不重复How exactly does <script defer=“defer”> work?
引用的推荐答案是关于内联脚本,其中浏览器行为对我来说很清楚 - 它只是忽略了defer。我的问题是关于外部脚本,在这种情况下浏览器应该执行外部延迟脚本
文档被解析后
正如文档所述,因此在 onload 事件之后。
所以我正在等待适当的答案...
【问题讨论】:
-
4.21.1 Script element: "使用这些属性可以选择三种可能的模式。如果存在异步属性,则脚本将在可用时立即执行,但不会进一步阻塞页面解析。如果 async 属性不存在但 defer 属性存在,则在页面完成解析后执行脚本。如果两个属性都不存在,则获取脚本并在用户代理继续解析页面之前立即执行”
-
所以你建议“onload”事件总是在页面被解析时触发,因此在延迟脚本之后?
-
尝试在
<script type=""></script>的末尾设置type和srcelem_onload -
12.2.6 The end: 第三步,执行所有延迟脚本;第四步,开火DOMContentLoaded; ... 第 7 步:触发load事件
标签: javascript