2011-05-17 65 views

回答

75

Can I use cross-document messaging

FF3 +,IE8 +,Chrome浏览器,Safari浏览器(5?),Opera10 +

+32

需要注意的是IE8/9只支持数据参数字符串,而所有其他浏览器都支持对象。 – 2013-06-04 04:41:02

+1

@Brando:你评论刚刚救了我一天。我想我会花几个小时试图弄清IE为什么不起作用;但是,我正在发送一个对象。 – 2013-09-01 16:05:49

+4

旧的帖子,但你可以发送json(刺)并使用eval来解码对象 – ElSinus 2014-06-24 13:02:30

11
+0

很好的指出!我甚至不知道它可以在其他浏览器的windowws/tabs中使用> _> – Raynos 2011-05-17 20:29:26

+0

IE9支持跨Windows /标签页的postMessage的任何想法? – Blowsie 2011-08-05 13:22:58

+0

postMessage()API现在对IE9模式页面具有异步行为。本文http://blogs.msdn.com/b/ieinternals/archive/2009/09/16/bugs-in-ie8-support-for-html5-postmessage-sessionstorage-and-localstorage.aspx解释了仍然存在的问题在IE9中并不确定它是否已经得到纠正。 – 2011-08-05 14:36:35

2

为了最近的价值,我遇到了一些奇怪的webkit浏览器/版本,它们不支持postMessage。我使用IE(8)检测作为寻求替代方法的手段。相反,我也许应该只是做了一些这样的事情:

if(window.postMessage){ 
    console.log('Supports post message'); 
} 

或者可能有点清洁:

var pm_is_supported = typeof(window.postMessage) == 'function'; 
+0

谢谢,这是好东西。这不是问题的答案,而应该是一个评论。 – 2014-04-08 08:19:18

+0

您的清洁解决方案在IE8中无法使用。在IE8中window.postMessage以对象形式返回 – KingOfHypocrites 2014-05-25 15:14:35

+0

我会坚持:return !! window.postMessage; – KingOfHypocrites 2014-05-25 15:17:09

7

的postMessage在IE8 +无论其

  • 记住支持了IE9及以下要求数据以字符串形式传递,而不是作为对象传递。
  • IE不喜欢你在页面加载后立即打电话postMessage(我假设这与你发布的需要时间加载的iframe有关)。
    使用setTimeout等待一两秒钟,然后致电postMessage
    我花了几个小时才弄明白这一点,IE并没有给我任何错误信息,直到我添加了setTimeout,它才静静地无所事事。

如果你想开始在IE浏览器实际上做工作演示,看看this nifty tutorial by Ilya Kantor