如何正确使用postMessage与html5和现代浏览器做跨域消息传递?我还是会出错
How to properly use postMessage to do cross-domain messaging with html5 and modern browsers ? I still get errors
我肯定这里有什么问题,但我不能完全把手指放在它…这里的例子表现得很好,在控制台上没有通知或错误,所以这意味着我的浏览器支持html5的跨域消息传递(当然,它是Chrome 14..)。
在WebsiteA.com中加载的脚本创建了一个iframe并将其附加到WebsiteA.com的文档中。附加的框架将包含WebsiteB.com,当它被加载时,它必须向它的父节点WebsiteA.com发送消息,告诉它WebsiteB.com已经准备好接收一些JSON。当WebsiteA.com收到此消息时,它将返回JSON。 WebsiteA.com在</body>
前面有一行,就像这样:<script scr="http://WebsiteB.com/load-my-iframe.js" type="text/javascript"></script>
,在load-my-iframe.js
里面,我有以下内容:
var child = document.createElement('iframe');
child.src = 'http://WebsiteB.com/child.html';
var body = document.getElementsByTagName('body')[0]
body.appendChild(child);
var SomeJSON = {"something" : "that WebsiteB should have"};
window.onmessage = function (e) {
if (e.origin === 'http://WebsiteB.com' && e.data === 'ready') {
e.source.postMessage(SomeJSON, 'http://WebsiteB.com');
}
}
这样就创建了iframe元素,将其附加到WebsiteA.com的文档并等待它说它准备好了(我猜…)。在website.com上,我有一个文件child.html,它是WebsiteA.com的文档中加载的iframe的src
,该文件具有以下内容:
<!DOCTYPE html>
<html lang="pt">
<head>
<title>WebsiteB.com</title>
<script type="text/javascript">
window.onload = function () {
window.parent.postMessage('ready','*');
}
window.addEventListener('message', receiveMessage, false);
function receiveMessage(event) {
if (event.data.something === "that WebsiteB should have") {
document.write('It worked!');
}
}
</script>
</head>
<body>
</body>
</html>
现在是奇怪的东西:
遗憾的是,我不拥有WebsiteA.com和WebsiteB.com,但我设法在一个顶级域名和子域名(以。no.de结尾)之间工作。它确实有效,但在谷歌Chrome 14的控制台,我得到的是经典的Unsafe JavaScript attempt to access frame with URL http://WebsiteA.com/ from frame with URL http://WebsiteB.com/child.html. Domains, protocols and ports must match.
。html5demos中的例子没有这个错误也可以正常工作。
为什么我得到这个错误,我如何摆脱它
我刚刚试过你的代码,这似乎在Chrome中工作。它使用jsfiddle和jsbin在父窗口和子窗口之间传递消息。
http://jsbin.com/oxesef/4/edit预览
这不是答案,但可以帮助你。
我使用http://easyxdm.net/wp/来避免这类问题。
卡尔- 为什么我得到Chrome本机消息“;找不到指定的本机消息传递主机&”;
- 消息传递系统 jquery 发送jQuery514109241_1210239812938当我在消息中放入:))时
- 帆上的自定义和多语言消息如何出错 js.
- 有没有一种简单的转换方法可以将chrome消息传递转换为safari消息传递语法
- 尝试使用Angular.js显示验证消息时出错
- 消息传递接收端
- 基本的谷歌chrome扩展消息传递不起作用
- Chrome 扩展消息传递体系结构
- 为什么我无法将此消息传递到选项卡中运行的所有帧
- Chrome扩展消息传递:未发送响应
- 为什么在定义回调/侦听器函数(异步消息传递,port.on)后没有立即设置全局变量
- Chrome 消息传递.未捕获错误:连接到扩展时出错
- 在 MQTT 客户端中“未捕获的引用错误:未定义消息传递”
- 用于 SMS 消息传递的 window.location.href - 平台兼容性
- 谷歌打包应用原生消息传递
- 消息传递在 Chrome 19 中断开
- 获取频道中的消息数,而无需在 Twilio IP 消息传递中检索它们
- PHP 和 Jquery 之间的消息传递
- 加载从跨文档消息传递中作为事件数据获得的 pdf
- 如何正确使用postMessage与html5和现代浏览器做跨域消息传递?我还是会出错