我不知道该怎么办。我尝试了不同来源的几个示例代码,我在不同的浏览器中尝试过它们(从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>
非常感谢,非常感谢
答案 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);