javascript - 如何等待 iframe 父级为 postMessage 做好准备?
问题描述
在iframe 中,我如何才能等到我确定我的父母已经注册了它eventListener:message
,然后再尝试注册window.parent.postMessage
它?
下面的代码似乎有一个竞争条件,它(虽然它恰好在没有延迟的情况下工作)我已经在发送前的 1s 延迟中混杂在一起,以提高可靠性。
// 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);
我怎么能确定地实现这个?我不想“只希望”父代码中的代码运行得比我设置的任何延迟都快——相反,我想消除这种严重的“安全延迟”,只需要定义可以工作的代码,而不是碰巧可以工作的代码。
解决方案
推荐阅读
- flutter - FutureBuilder 不等待异步函数加载
- javascript - 使用 javascript 为 div 类设置悬停
- reactjs - 谷歌云存储桶上的资产的Aframe资产加载呈现黑色平面而不是图像
- keras - 在 Keras LSTM 自动编码器中重构消耗的序列掩码
- node.js - 使用 Node.js 在 React 中使用 Express 的 LocalHost 到域名
- java - 将带有“+”的时间戳解析为 Java 中的 Date 或 Instant
- python - Python Selenium 无法与弹出窗口交互
- reactjs - 创建一个将在 React 中保存对象的数据结构
- react-native - 如何在 React Native 中将键盘的颜色更改为 android 的深色模式?
- html - 更改下拉框的背景颜色