defer 对iframe加载无效吗?

发布于 2022-09-12 23:56:34 字数 1494 浏览 25 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情绪少女 2022-09-19 23:56:34

defer 是在 DOMContentLoaded 之前执行,而这个事件仅仅表示 DOM 加载完成了,而资源并没有加载完成,资源加载完成后会触发 onload,所以你还是需要 onload 后处理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文