Javascript 如何向兄弟iFrame发送邮件
我正在寻找一种在父页面中不使用任何javascript的情况下将消息发送到同级iFrame的方法。我遇到的困难是试图从第一个iFrame获取另一个iFrame的窗口对象 页面的布局如下所示:Javascript 如何向兄弟iFrame发送邮件,javascript,iframe,xss,postmessage,Javascript,Iframe,Xss,Postmessage,我正在寻找一种在父页面中不使用任何javascript的情况下将消息发送到同级iFrame的方法。我遇到的困难是试图从第一个iFrame获取另一个iFrame的窗口对象 页面的布局如下所示: html body (http://host.com/) iFrame#a (http://me.com/a) iFrame#b (http://me.com/b) 从iFrame#a中,我正在尝试: (iFrame#b window).postMessage(...) 问题是我不知道如何从iF
html body (http://host.com/)
iFrame#a (http://me.com/a)
iFrame#b (http://me.com/b)
从iFrame#a
中,我正在尝试:
(iFrame#b window).postMessage(...)
问题是我不知道如何从
iFrame\a
中获取iFrame\b
的窗口对象parent.getElementById()
和其他函数受XSS限制。我只想向父页面上来自我的域的所有其他iFrame发出postMessage
http://me.com/在上面的示例中。您将无法执行此操作,因为iframe无法与其所添加的页面(或该页面中的任何内容)交互,除非父对象位于同一域下(在您的示例中,情况并非如此)。如果可以,它将造成XSS安全问题,正如您所指出的,您已经意识到了这一点
相反,您可以:
- 在/a/中设置cookie并在/b/中对其进行轮询/(这将非常昂贵,尽管/b/必须以某种方式继续呼叫服务器)
- 使用“HTML5”持久数据存储机制,存储来自/a/的数据,并在/b/中对其进行轮询/(可能可以使用)
- 使用链接通过服务器链接所有兄弟姐妹
- 重新考虑一下你想要做什么:你想要达到的目标听起来很奇怪——你确定没有比使用这样的iFrame更好的方法了吗
window.top.frames
(访问顶部窗口对象)或window.parent.frames
(用于访问直接父窗口对象,而可能存在其他更高级别的父对象)。无需使用getElementById
或其他与DOM相关的函数。有关更多信息,请参阅此:
window.frames属性返回一个类似数组的对象,然后可以对该对象进行迭代,并在每个iframe上执行postMessage。这不会触发相同的原点限制,因为除了在任何窗口上使用postMessage之外,您不会以任何方式与任何窗口进行交互。因为您希望在特定域的每个iframe上执行postMessage,您只需执行以下操作:
var frames = window.parent.frames;
for (var i = 0; i < frames.length; i++) {
frames[i].postMessage("hello", targetDomain);
}
var frames=window.parent.frames;
对于(var i=0;i