我正在考虑使用窗口.postMessage https://developer.mozilla.org/en/DOM/window.postMessage直接进行跨域通信。
If I do:
-
postMessage()
从父框架
- 加载 iframe
-
window.addEventListener("message", callback, false);
从子 iframe
我在加载 iframe 之前发布的消息什么时候会被执行?他们一定会被处决吗?有时间保证吗?
我想从顶部框架传递一个影响子框架初始化的参数。
postMessage() 函数是异步的,这意味着它将立即返回。所以你不能与它进行同步通信。
在您的示例中,发布的消息将消失在空白中,因为在执行 postMessage() 函数时没有消息事件的侦听器。
如果您先加载 iframe,然后调用 postMessage(),那么可能会出现计时问题。 (根据我的经验,没有,父代码总是首先执行,但我不确定这一点。)
以下是我针对不知道 iframe 何时准备就绪的问题的解决方案。
在父窗口中:
- 加载 iframe(这也是异步的)
- 设置消息监听器
- 将消息发布到 iframe(只是在这里尝试)
- 等待更多消息到来
在 iframe 中:
- 设置消息监听器
- 将消息发送到父窗口(只是在这里尝试)
- 等待更多消息到来
谁收到对方的第一条消息,谁就开始真正的通信。
根据我的经验,从父级到 iframe 的消息总是会丢失,因此当父级收到来自 iframe 的消息时,通信就会开始。但在此设置中,哪个先启动并不重要。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)