defer 对iframe加载无效吗?
A.HTML
<div id="d2" class="div2">
<p>Street Fighter II: The World Warrior</p>
<p>The King of Fighters '96</p>
<p>Metal Slug 2</p>
</div>
<iframe src="B.html" frameborder="1" width="50%" height="500" id="f1">
</iframe>
<script defer src="A.js"></script>
A.js
let x = document.getElementById("f1");
let ifra_window = x.contentWindow;
let s = ifra_window.document.getElementById("d1");
console.log(s.children[0].innerHTML);
B.HTML
<div id="d1" class="div1">
<p>c#</p>
<p>python</p>
<p>javascript</p>
</div>
实验报错:Uncaught TypeError: Cannot read property 'children' of null
我知道这是B.HTML
未加载完成, A.js
就急着调用导致的错误。
因为我将A.js
修改成 我初写的模式就OK了。
old_A.js
let x = document.getElementById("f1");
x.onload = function () {
let ifra_window = x.contentWindow;
let s = ifra_window.document.getElementById("d1");
console.log(s.children[0].innerHTML);
}
我的问题是:defer应该达到“HTML读取完毕,再加载js脚本”的作用,但显然本例并非如此,难道defer只对本页面HTML有效,对iframe的加载无效?? 如果是这样,只能用old_A.js这个模式了。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
defer 是在 DOMContentLoaded 之前执行,而这个事件仅仅表示 DOM 加载完成了,而资源并没有加载完成,资源加载完成后会触发 onload,所以你还是需要 onload 后处理