【问题标题】:access function in iframe from cross domain parent从跨域父级访问 iframe 中的函数
【发布时间】:2013-02-05 19:58:27
【问题描述】:

我对此进行了一些研究,我发现您可以在同一域的情况下使用

document.getElementById('iframe_id').contentWindow.function_name()

我在跨域上试过这个(只是在试验) 它给出了一个跨域错误和[异常:TypeError:对象[对象窗口]的属性'function_name'不是函数]

所以我有一个三部分的问题

a) 如果我无法从子级访问父级(并且我已经在处理此问题,在子级 iframe 中使用另一个 iframe(来自父级域)),这是可以理解的。 但是为什么我们在从父母那里访问孩子时遇到问题,这和拥有一个

不是一回事吗?

b) 当我调试时,使用 chrome 检查器工具并尝试查看 document.getElementById('iframe_id').contentWindow 的值,我在它下面看到了我的 function_name,但无法通过 document.getElementById('iframe_id ').contentWindow.function_name()。这是为什么呢?

c) 如何从父级成功调用 iframe 中的 javascript 函数(无需 easyXDM 或任何其他插件)?

更多详情: 我更多的是寻找两种方式的通信,例如,我的父母将在 iframe 中调用一个返回结果的函数,并根据该结果,父母将决定是否要重定向

【问题讨论】:

    标签: iframe cross-domain


    【解决方案1】:

    我使用了 postMessage。似乎是一个更简单的解决方案。

    我想做的事: 'beforeunload',向子 iframe 发送消息,接收作为回调的响应。基于响应显示消息或导航。

    但这是不可能的。

    我就是这样解决的:

    每次在我的子框架中进行更改时,我都会向父框架发送一条消息。 我收集了这些消息并在'beforeunload'上使用它们来决定我是否应该导航或显示消息

    【讨论】:

      【解决方案2】:

      您可以使用 location.hash 轮询。您的父母更改 URL #hash 并且孩子在 setInterval 循环中检查更改。 http://ajaxian.com/archives/cross-domain-iframe-communication-without-location-polling

      关于“easyXDM”,您实际上是在重新发明轮子。

      【讨论】:

      • 我更多的是寻找双向通信,例如,我的父母将在 iframe 中调用一个返回结果的函数,并根据该结果,父母将决定是否要重定向。我将深入探讨您的建议,以检查是否能找到解决问题的方法
      猜你喜欢
      • 2014-01-17
      • 2012-04-05
      • 2010-10-16
      • 1970-01-01
      • 2011-10-03
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多