我已经对此进行了一些研究,我发现在同一个域的情况下你可以使用
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)如何从父母(没有easyXDM或任何其他插件)成功调用iframe中的javascript函数?
更多细节: 我更喜欢寻找双向通信,我的父母将在iframe中调用一个返回结果的函数&根据该结果,父母将决定是否要重定向
答案 0 :(得分:1)
我使用了postMessage。看起来像一个更简单的解决方案。
我想做什么: 'beforeunload',向子iframe发送消息,接收响应作为回调。基于响应显示消息或导航。
但这是不可能的。
这就是我解决它的方法:
每次在我的子框架中进行更改时,我都会向父母发送一条消息。 我收集了这些消息&在'beforeunload'上使用它们来决定我是应该导航还是显示消息
答案 1 :(得分:0)
您可以使用location.hash轮询。您的父级更改URL #hash并且子级检查setInterval循环中的更改。 http://ajaxian.com/archives/cross-domain-iframe-communication-without-location-polling
对于“easyXDM”而言,你本质上正在重新发明轮子。