2

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

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 中调用一个返回结果的函数,并根据该结果,父母将决定是否要重定向

4

2 回答 2

1

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

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

但这是不可能的。

这就是我解决它的方法:

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

于 2013-02-06T18:17:44.193 回答
0

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

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

于 2013-02-05T20:08:32.917 回答