Internet Explorer 9策略设置影响window.postMessage

4

我在JavaScript文件中使用了window.postMessage方法。由于某些策略设置,这个方法在IE9中似乎无法正常工作。我无法确定是哪种策略导致的问题,请问有没有谁有什么想法呢?


我有完全相同的问题,我将在这个问题上设置赏金,因为我无法弄清楚我们政策中的问题所在。 - Stefan Ernst
只有你的示例失败了,还是互联网上所有的“postMessage()”演示都失败了? - Paul Grime
这是同源策略http://blogs.msdn.com/b/ieinternals/archive/2012/04/03/explaining-same-origin-policy-part-2-limited-write.aspx,不确定您是否可以更改它。 - Simon Mourier
嘿,伙计们,这个例子在我们内部的IE9中无法工作:http://javascript.info/tutorial/cross-window-messaging-with-postmessage 但是在我安装的其他任何IE9中都可以工作。 - Stefan Ernst
2个回答

4
我相信你要找的关键是:
HKEY_CURRENT_USER\Software\Policies\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_CROSS_DOCUMENT_MESSAGING
如果上述注册表键已设置,则IE(所有版本,从我所知道的来看)将返回未定义的window.postMessage函数。

2
谢谢。我刚刚弄清楚了。在组策略编辑器中,查找Windows组件/Internet Explorer/安全功能/AJAX,并从“关闭跨文档消息传递”中删除“启用”标志。 - Stefan Ernst
1
当时几乎每个新的IE功能都有一个禁用选项,所以这个选项最初就被添加了进来。(一般的想法是,如果发现漏洞,可以进行手术式的中和,而不需要用户禁用JavaScript)。在后来的IE版本中,团队放弃了为新功能提供策略控制的“关闭开关”,即使是像IE11中的WebGL这样的大功能也是如此。这个策略真的不应该被设置。 - EricLaw

3

让我在评论之外进一步阐述。你可以在这里看到:

http://javascript.info/tutorial/cross-window-messaging-with-postmessage

如果我在家使用普通的IE9或者在browserstack.com上使用IE9,消息会在iframe中正常加载。然而,如果我使用我们内部网站的IE9,则在JS控制台中会出现以下错误:

SCRIPT16385: Not implemented

cross-window-messaging-with-postmessage, line 1 character 1
SCRIPT1002: Syntax error 
all.js, line 1 character 1

似乎是某些安全设置阻止了postMessage调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接