Javascript 现在哪些浏览器支持window.postMessage调用?

Javascript 现在哪些浏览器支持window.postMessage调用?,javascript,cross-browser,Javascript,Cross Browser,现在支持window.postMessage调用的浏览器有哪些?我正在寻找本地支持它的浏览器,而不是通过iFrame攻击。 FF3+、IE8+、Chrome、Safari(5?)和Opera10+IE8不允许跨窗口/选项卡发送邮件 欲了解更多信息,请点击此处 最近我遇到了一些不支持postMessage的奇怪的webkit浏览器/版本。我使用IE(8)检测作为寻找替代方案的手段。相反,我可能应该这样做: if(window.postMessage){ console.log('Supp

现在支持
window.postMessage
调用的浏览器有哪些?我正在寻找本地支持它的浏览器,而不是通过iFrame攻击。


FF3+、IE8+、Chrome、Safari(5?)和Opera10+

IE8不允许跨窗口/选项卡发送邮件

欲了解更多信息,请点击此处


最近我遇到了一些不支持postMessage的奇怪的webkit浏览器/版本。我使用IE(8)检测作为寻找替代方案的手段。相反,我可能应该这样做:

if(window.postMessage){
    console.log('Supports post message');
}
或者可能更干净一点:

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

然而,IE8+支持postMessage

  • 请记住,IE9及以下版本要求数据以字符串形式传递,而不是作为对象传递
  • IE不希望您在页面加载后立即调用
    postMessage
    (我假设这与您发布到的iframe需要时间加载有关)。
    使用
    setTimeout
    在调用
    postMessage
    之前等待一秒或两秒
    我花了几个小时才弄明白这一点,IE没有给我任何错误消息,只是默默地什么也不做,直到我添加了setTimeout

如果您想从一个在IE中实际运行的演示开始,请查看所有支持IE 11、Edge、Firefox 57+、Dafari 11+、iOS Safari 10.2+、Opera mini、android Chrome、UC浏览器等的最新浏览器。


很高兴指出这一点!我甚至不知道它可以跨其他浏览器的windowws/tabs运行>\u9是否支持跨windows/tabs的postMessage?postMessage()API现在具有IE9模式页面的异步行为。这篇文章解释了IE9中仍然存在的问题,但不确定是否已经纠正。请注意,IE8/9只支持数据参数的字符串,而所有其他浏览器都支持对象。@Brando:你的评论刚刚拯救了我的一天。我想我会花上好几个小时去弄清楚IE为什么不工作;但是请注意,我正在发送一个object.old post,但是您可以发送json(sting)并使用eval进行解码object@ElSinus我会避免评估。我建议结合使用JSON.stringify和JSON.parseThank,这是很好的东西。但这并不是问题的答案,应该是一个评论。你的更清洁的解决方案在IE8中不起作用。在IE8 window.postMessage中,返回的对象是:return!!window.postMessage;