【问题标题】:IE8/9 window.postMessage not working, but why?IE8/9 window.postMessage 不工作,但为什么呢?
【发布时间】:2012-12-11 23:50:16
【问题描述】:

“postMessage”是一个 HTML5 API,它在包括 IE8/9 在内的所有主流浏览器中都可用。我想做的是从页面创建一个弹出窗口,并能够使用“postMessage”与弹出窗口对话。这适用于除 IE8/9 之外的所有浏览器。失望!

看起来IE8/9只允许iframe之间的通信,而不是两个窗口之间的通信,即使窗口在同一个层次结构中。

【问题讨论】:

标签: html internet-explorer


【解决方案1】:

我发现 IE9 中的 .postMessage() 不可靠,除非我使用 Strings。

我的解决方法是简单地调用.postMessage(JSON.stringify({object: 'data'})) 并在另一端的onMessage() 函数中使用JSON.parse()

【讨论】:

  • 这完美地解决了我在 IE8 和 IE9 中的问题。谢谢!
  • 另外,data 属性在MessageEvent 对象中是只读的,因此我必须将字符串中的已解析对象附加为另一个属性,以便之后访问它。不知道是否有更好的方法来做到这一点。
  • 这个问题也把我逼疯了!非常感谢你的这个好消息。
  • 修复了 IE 11 中的问题,而且仍然是必要的。
【解决方案2】:

.postMessage 方法工作,您只需要了解如何它在 IE8 及更高版本中工作。不幸的是,对于 IE8 和 IE9,它不会做你想要的(尽管它在 IE10 中做)。虽然您可以在 IE8/9 中的帧之间发送消息,但不能将消息发送到单独的窗口。

有一种解决方法适用于 一些 实例。 Martin Beeby 在他关于这个问题的博文的最后一段中讨论了它:PostMessage Popups and IE

有关这方面的更多信息以及其他一些注意事项,请参阅 Eric Lawrence 的post on MSDN

【讨论】:

  • 正如 Lawrence 在他的帖子更新中指出的那样,从 IE11 开始,这仍然未修复。
猜你喜欢
  • 1970-01-01
  • 2015-09-13
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多