似乎window.postMessage 的重点是允许托管在不同域上的窗口/框架之间进行安全通信,但它实际上似乎不允许在 Chrome 中进行。
这是场景:
- 在域 A 的页面中嵌入 <iframe>(
src
域 B *上有一个) - <iframe> 最终主要是一个 <script> 标签,在其结束时执行......
- 我打电话给 window.postMessage( some_data , page_on_A )
<iframe> 绝对是在域 B 的上下文中,我已经确认 <iframe> 中嵌入的 javascript 可以正确执行并postMessage
使用正确的值调用。
我在 Chrome 中收到此错误消息:
无法向A发布消息。收件人有来源B。
这是在 A 上的页面中注册消息事件侦听器的代码:
window.addEventListener(
"message",
function (event) {
// Do something
},
false);
我也试过调用window.postMessage(some_data, '*')
,但所做的只是抑制错误。
我是否只是错过了这一点, window.postMessage(...) 不是为了这个吗?还是我只是做错了可怕的事?
* Mime-type text/html,它必须保留。