javascript postMessage无效

时间:2011-06-20 13:18:20

标签: javascript iframe postmessage

我不知道该怎么办。我尝试了不同来源的几个示例代码,我在不同的浏览器中尝试过它们(从Chrome 9到FF 4),似乎仍然没有使用“postMessage”功能。 JS控制台没有给我什么,没有一个错误,仍然没有发生任何事情:框架不想通信。完全没有。这甚至不是跨域的:两个帧都来自我的域名。

以下是上次尝试的示例代码: 父框架:

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

子框架:

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

非常感谢,非常感谢

4 个答案:

答案 0 :(得分:14)

postMessage的第二个参数必须是http://localhost

之类的网址

答案 1 :(得分:1)

如果您不处理不同的来源,请输入location.origin作为 targetOrigin

top.postMessage('hello', location.origin);

答案 2 :(得分:1)

您还可以使用top.postMessage('hello', "*");

将消息发送到任何窗口

HTML 1:

<iframe src="IFRAME_URL"></iframe>
<script>
window.addEventListener( "message",
  function (e) { 
        alert(e.data);
  },
  false);
</script>

html 2:

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

答案 3 :(得分:0)

我不确定安全问题,但通常情况下,我只是抓住父窗口位置:

var url = (window.location != window.parent.location) ? document.referrer: document.location;
top.postMessage('message', url);