iframe 中异步加载的 script 会阻塞 frame 的 load 事件吗?

使用 iframe 打开一个子页面,子页面中有一段异步加载 script 文件的代码,如:

var node = doc.createElement('script');
node.src = 'xxx.js';
node.async = true;
head = doc.getElementsByTagName('head')[0];
head.appendChild(node);
node.addEventListener('load', function(e){
    console.log('script complete!!');
}, false);

父页面给 iframe 绑定了 load 事件:

$('iframe').on('load', function(){
    console.log('frame complete!!');
});

请问 iframe 的 load 事件会等待 这个异步的 js 加载完毕再触发吗?

阅读 7k
3 个回答

做了个测试

index.html

(function () {
  var iframe = document.createElement('iframe')

  iframe.src = './test.html'
  iframe.style.display = 'none'

  document.body.appendChild(iframe)

  iframe.onload = function () {
    console.log('iframe loaded!')
  }
}());

test.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title></title>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js" async="true" onload="console.log('async script loaded!')"></script>
  </head>
  <body>

  </body>
</html>

clipboard.png

看起来结果是先加载异步脚本,后执行 iframe load 事件

onload就是当前iframe或document加载完成后的回调。可以用作监听iframe加载

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏