Html IE8/9 window.postMessage不工作,但为什么?
“postMessage”是一个HTML5API,它在包括IE8/9在内的所有主要浏览器中都可用。我试图做的是从一个页面创建一个弹出窗口,并能够使用“postMessage”与弹出窗口对话。这适用于除IE8/9之外的所有浏览器。失望Html IE8/9 window.postMessage不工作,但为什么?,html,internet-explorer,Html,Internet Explorer,“postMessage”是一个HTML5API,它在包括IE8/9在内的所有主要浏览器中都可用。我试图做的是从一个页面创建一个弹出窗口,并能够使用“postMessage”与弹出窗口对话。这适用于除IE8/9之外的所有浏览器。失望 看起来IE8/9只允许在iFrame之间进行通信,但不允许在两个窗口之间进行通信,即使这些窗口在同一层次结构中。使用.postMessage方法,您只需要了解它在IE8及以上的版本中是如何工作的。不幸的是,对于IE8和IE9来说,它并不能满足您的需求(尽管它在IE1
看起来IE8/9只允许在iFrame之间进行通信,但不允许在两个窗口之间进行通信,即使这些窗口在同一层次结构中。使用
.postMessage
方法,您只需要了解它在IE8及以上的版本中是如何工作的。不幸的是,对于IE8和IE9来说,它并不能满足您的需求(尽管它在IE10中实现了)。虽然可以在IE8/9中的帧之间发送消息,但不能将消息发送到单独的窗口
在某些情况下,有一种变通方法可以奏效。马丁·比比(Martin Beeby)在他关于这个问题的博客文章的最后一段中对此进行了讨论:
有关这方面的更多信息以及其他一些注意事项,请参阅Eric Lawrence的。我发现IE9中的
.postMessage()
不可靠,除非我使用字符串
我的解决方法是简单地调用.postMessage(JSON.stringify({object:'data'}))
并在另一端的onMessage()
函数中使用JSON.parse()
。您能在这里与我们分享您的代码吗?您似乎已经回答了自己的问题,只有帧和iframe。你的问题到底是什么?正如劳伦斯在他的文章更新中所指出的,这在IE11中仍然没有得到解决。这在IE8和IE9中完美地解决了我的问题。谢谢另外,data
属性在MessageEvent
对象中是只读的,因此我必须从字符串中附加已解析的对象作为另一个属性,以便以后访问它。我不知道是否有更好的方法来解决这个问题。这个问题也把我逼疯了!非常感谢你的这个好消息。也修复了IE 11中的问题,仍然是必要的。