提问人:JamesTheAwesomeDude 提问时间:8/1/2020 最后编辑:JamesTheAwesomeDude 更新时间:9/10/2022 访问量:666
如何等待 iframe 父级准备好发布消息?
How to wait for iframe parent to be ready for a postMessage?
问:
我怎样才能在 iframe 中等到我确定我的父母已经注册了它后再尝试它?eventListener:message
window.parent.postMessage
下面的代码似乎有一个竞争条件,它(虽然它碰巧在没有延迟的情况下工作)我在发送前延迟了 1 秒,以提高可靠性。
// THIS CODE RUNS IN THE PARENT
window.addEventListener('message',event=>{
if(event.data==window.localStorage.getItem('expected')||confirm(event.data)) {
document.querySelector('form').submit();
}
});
// THIS CODE RUNS IN THE IFRAME
setTimeout(()=>{
window.parent.postMessage(document.body.innerText,window.location.origin);
},1000);
我怎样才能确定性地实现这一点?我不想“只是希望”父级中的代码比我设置的任何延迟运行得更快——相反,我想消除这种严重的“安全延迟”,只使用被定义为工作的代码,而不是碰巧工作的代码。
答:
1赞
Ruud Schroën
9/10/2022
#1
在父级注册其事件侦听器后加载 iframe 内容怎么样?
window.addEventListener('message', event => { ... });
var iframe = document.querySelector("#iframe");
iframe.src = "/url-to-load-in-iframe";
这样,您就可以在 iframe 开始发送消息之前确定事件侦听器已就位。
评论