似乎window.postMessage的要点是允许在不同域上托管的窗口/框架之间进行安全通信,但实际上似乎允许在Chrome中。
以下是该方案:
src
< 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,必须保留。
答案 0 :(得分:73)
以下是适用于Chrome 5.0.375.125的示例。
页面B(iframe内容):
<html>
<head></head>
<body>
<script>
top.postMessage('hello', 'A');
</script>
</body>
</html>
请注意top.postMessage
或parent.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
修改强>
从another question开始,它看起来域(此处的A和B)必须/
才能使postMessage
正常工作。
答案 1 :(得分:20)
您应该在加载后将消息从帧发布到父级。
框架脚本:
$(document).ready(function() {
window.parent.postMessage("I'm loaded", "*");
});
在父母那里听:
function listenMessage(msg) {
alert(msg);
}
if (window.addEventListener) {
window.addEventListener("message", listenMessage, false);
} else {
window.attachEvent("onmessage", listenMessage);
}
使用此链接获取更多信息:http://en.wikipedia.org/wiki/Web_Messaging
答案 2 :(得分:2)
您可能尝试将数据从mydomain.com发送到www.mydomain.com或反向,注意您错过了“www”。 http://mydomain.com和http://www.mydomain.com是与javascript不同的域。