javascript - 太晚了才收到第一条帖子?与消息和加载事件相关的事件顺序

标签 javascript

当我收到 iframe 的 DOMContentLoaded 事件时,我会从父窗口向 iframe 发送一条消息:

iframe.addEventListener('DOMContentLoaded', function() {
    iframe.postMessage('blah');
});

在我的 iframe 中,我正在为 DOMContentLoaded 上的 postMessage 设置监听器:

function msgHandler(e) {
     console.log('incoming message:', e.data);
}

window.addEventListener('DOMContentLoaded', function() {
    window.addEventListener('message', msgHandler, false);
});

所以现在一切正常了。即使我在 DOMContentLoaded 中设置了消息监听器,iframe msgHandler 仍然收到 blah 消息。我很惊讶,因为我预计我应该首先在 iframe 中设置消息监听器,然后让我的父窗口发送消息。

加载事件和消息事件的事件顺序是什么?

最佳答案

父页面和 iFrame 在浏览器中的不同线程中运行。所以ready事件可以并发运行。

当 iFrame 收到来自父级的消息时,它会被添加到事件队列的后面进行处理。鉴于将在 domReady 事件之后接收到,即使设置此监听器的代码仍在要运行的队列中,这也将起作用,因为它将位于堆栈队列的更上方。

关于javascript - 太晚了才收到第一条帖子?与消息和加载事件相关的事件顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37988773/

相关文章:

javascript - 关于 javascript 中的条件语句

javascript - 让 JavaScript 创建一个完整的 li

javascript - 我应该在 mediaelementjs 中使用什么类型的音频文件?

javascript - 使用 Angular UI 路由器 $stateProvider 在状态上声明主 Controller

javascript - 如果在右侧则滚动 (jQuery)

javascript - 按对象数组中不是属性值的值过滤数组 - Javascript

javascript - 如何强制浏览器(应用程序)保存自动填充的登录名和密码

javascript - 使嵌套 mongodb 查询更快

javascript - 在 jQuery 中是否有任何类似于 ('click' 的复选框启用事件的方法?

javascript - 为什么在这个html/css/jquery中注册了两个点击事件