看起来window.postMessage的意义在于允许托管在不同域上的窗口/框架之间的安全通信,但实际上在Chrome中似乎不是allow.

以下是场景:

  1. 嵌入一个<iframe>(域B*)上的页面中显示src
  2. <iframe>最终主要是<script>标记,在执行结束时.
  3. 我叫windows .postMessage(some_datapage_on_A)

<iframe&>肯定位于域B的上下文中,我已经确认该<iframe&>中嵌入的javascript可以正确执行,并使用正确的值调用postMessage.

我在Chrome中收到以下错误消息:

无法将消息发布到A. 收件人的来源是B.

下面是在A:上的页面中注册消息事件侦听器的代码:

window.addEventListener(
  "message",
  function (event) {
    // Do something
  },
  false);

我还试着拨打window.postMessage(some_data, '*'),但所有操作都是 suppress 错误.

我是不是错过了这里的要点,就是window.postMessage(.)不是为了这个?还是我做得太错了?

*Mime类型text/html,它必须保留

推荐答案

下面是一个在Chrome 5.0.375.125上运行的示例.

页面B(IFRAME内容):

<html>
    <head></head>
    <body>
        <script>
            top.postMessage('hello', 'A');
        </script>
    </body>
</html>

注意这里使用的是top.postMessageparent.postMessage,而不是window.postMessage

页面A:

<html>
<head></head>
<body>
    <iframe src="B"></iframe>
    <script>
        window.addEventListener( "message",
          function (e) {
                if(e.origin !== 'B'){ return; } 
                alert(e.data);
          },
          false);
    </script>
</body>
</html>

A和B必须是http://domain.com左右

EDIT:

another question开始,看起来域(这里是A和B)必须有/,postMessage才能正常工作.

Html相关问答推荐

如何删除html原生对话框的宽度

隐藏滚动条和禁用文本 Select 的CSS技术?

Chrome和Safari浏览器中的CSS3动画不同

首字下沉非字母字符

如何在用css使用网格视图时设置宽度?

Django中的图像未从静态显示

Html视频标签:圆角像素化

如何使用css在响应图像后面添加形状?

rmarkdown HTML数字不适用于针织衫_1.44

带标签 css 的 div 内的中心图标

在Firefox中使用keySplines时,SVG: <animateMotion>不起作用

在HTML请求中添加源URL

CSS Grid 布局:1 大图和 3 小图

如何消除线性渐变线的模糊?

pull-right 不适用于 bootstrap alert 内的按钮

th 内的 div 标签没有占据全高

在 html 邮箱的左侧和右侧制作多个元素很热门吗?

涉及短代码时如何在页面上定位元素?

Angular Material Hide Password 在输入时切换

Select 除第一个匹配的子元素之外的第 nth-child(n)