要从父窗口向iframe发送第一条消息,您只能在iframe加载后才能执行此操作,在此之前,您甚至无法将消息从子窗口发送到父窗口。因此,为了这样做,请为iframe提供一个onload处理程序,以便您可以使用postmessge()。同样考虑以下代码。
我正在考虑直接将window.postMessage用于跨域通信。
如果我这样做:
postMessage()
来自父框架window.addEventListener("message", callback, false);
我在加载iframe之前发布的消息何时执行?是否保证将其全部执行?有时间保证吗?
我想从顶部框架传递一个影响子框架初始化的参数。
postMessage()函数是异步的,这意味着它将立即返回。因此您不能使用它进行同步通信。
在您的示例中,发布的消息将在空白中消失,因为在执行postMessage()函数时没有消息事件的侦听器。
如果您先加载iframe,然后再调用postMessage(),则可能存在计时问题。 (从我的经验来看,没有,父代码始终优先执行,但是我不确定这一点。)
下面是我不完全知道iframe何时准备就绪的问题的解决方案。
在父窗口中:
在iframe中:
谁从对方收到第一条消息,然后开始真实的通信。
[根据我的经验,从父级到iframe的消息总是丢失,因此当父级从iframe接收消息时,通信开始。但是在此设置中,哪个首先开始并不重要。
要从父窗口向iframe发送第一条消息,您只能在iframe加载后才能执行此操作,在此之前,您甚至无法将消息从子窗口发送到父窗口。因此,为了这样做,请为iframe提供一个onload处理程序,以便您可以使用postmessge()。同样考虑以下代码。
ifrm.setAttribute('src','www.yoururl.com'));
document.body.appendChild(ifrm);
ifrm.onload = function() {
this.contentWindow.postMessage(dataObject,'targetWindow');
}
要从父窗口向iframe发送第一条消息,您只能在iframe加载后才能执行此操作,在此之前,您甚至无法将消息从子窗口发送到父窗口。因此,为了这样做,请为iframe提供一个onload处理程序,以便您可以使用postmessge()。同样考虑以下代码。