两个iframe正在通信:SecurityError
Two Iframes are communicating: SecurityError
我有两个iframe。这些iframe通过postMessage
进行通信。
从一个iframe,如果我做以下操作,它不工作
// Broadcast to all iframes.
parent.frames.forEach(function (frame) {
frame.postMessage(data, 'http://localhost:4000');
});
误差:
Uncaught SecurityError:阻止了一个帧的起源为http://...访问一个帧的起源为http://...。协议、域和端口必须匹配。
然而,如果我执行以下操作,它就能很好地工作。无错误信息。为什么?
for (var i = 0 ; i < parent.frames.length ; ++i) {
parent.frames[i].postMessage(data, 'http://localhost:4000');
}
这里的问题看起来可以读作
为什么
parent.frames.forEach
给出SecurityError当我可以在for
中迭代它们时?
这是因为parent.frames
是不是数组而是窗口实例,因此,当您尝试访问.forEach
时,它正在寻找不同的窗口属性,安全性阻止访问。
来自window.frames
的MDN页面(parent
是一个Window)
返回窗口本身,它是一个类似于数组的对象,列出当前窗口的直接子框架。
如果你想使用.forEach
,从(一个可引用的)Array的原型
Array.prototype.forEach.call(parent.frames, callback);
相关文章:
- 如何使用HTML5与UDP套接字通信
- firefox插件和dev/panel之间的通信
- 如何在两个不同的iframe HTML之间进行通信
- CORS保持在SecurityError上:操作不安全
- 从子级(iframe)到父级的跨域通信不起作用
- 用于本地主机上进程间通信的Javascript中的UDP
- 带有 TCP/IP 通信的 JavaScript 十六进制代码
- Angularjs事件与发布/订阅指令之间的通信
- Firefox插件SDK:在侧边栏和主脚本之间通信对象
- 通过socket.io与heroku应用程序进行通信
- Ember.js:接受的子组件和父组件之间通信的最佳实践
- 如何在Windows Phone 8.1应用程序中在C#和Javascript之间传递数据或通信
- 如何在Famo.us中的两个视图(不同的js文件)之间进行通信
- 在画布上使用toDataUrl会导致IE中出现SecurityError
- 如何让2个html页面进行通信
- 在Jquery或Javascript中获取两个范围或日期之间的通信周数
- 构建一个HTML小部件来嵌入付费内容-如何确保与后端的通信安全
- 如何在同源选项卡之间建立通信
- 如何在 PHP 和 JS 中的并发会话之间进行通信
- 两个iframe正在通信:SecurityError