【问题标题】:cross domain iframe communication: can't read child's src跨域 iframe 通信:无法读取孩子的 src
【发布时间】:2011-06-07 15:21:17
【问题描述】:

我有一个 iframe,我想从 iframe 向其父窗口发送一条消息。孩子就是这样做的

window.location += '#do_install||something';

这就是 parent 所做的($ 是 jquery)

setTimeout('alert($("iframe#main_store_frame").attr("src"));', 5000);

我尝试了许多其他方法来检测位置变化,但都失败了。它们都向我显示了初始 iframe 位置,而不是添加了“#do_install||something”的新位置。请让 mw 知道我做错了什么。

【问题讨论】:

  • 从阅读Same Origin Policy开始,然后努力理解它:)
  • 这曾经是一个简单的跨域通信的hack,但它已经在所有当前浏览器中正确修补,因此你描述的是正确的行为。

标签: javascript jquery iframe cross-domain


【解决方案1】:

您有多种选择:

1 使用 window.name (in iframe) 和 iframe.contentWindow.name (in parent) 。 这个想法实际上是更改您的 iframe 名称(来自您的 iframe)

框架: window.name = "new value"

并使用父窗口中的 iframe.contentWindow.name(而“iframe”是您的 iframe 对象)

家长: console.log(iframe.contentWindow.name)

您可以阅读以下文章more information

2 使用 HTML 5 window.postMessage。你可以找到一个例子here

这个想法是能够在父窗口和 iframe 之间设置连接,同时按域使用访问列表。 如果你使用 jQuery,你可以使用jQuery exmaple

另一个项目是xAuth“是一个开放平台,用于在网络上扩展经过身份验证的用户服务。”

总结

如果您能够同时控制父框架和 iframe(至少要求您的合作伙伴将您的代码提交到他们的页面中),您将拥有跨域通信的权限

** 很抱歉没有在这里打印示例,它们太长了。

希望我能帮上忙。

【讨论】:

  • 解决方案 1 不适用于不同的域。它给出:错误:访问属性“contentWindow”的权限被拒绝。
  • Tilllito - 你能分享你的代码(jsfiddle)+浏览器版本吗?
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多