我对此做了一些研究,我发现在同一域的情况下,你可以使用
document.getElementById('iframe_id').contentWindow.function_name()
我在跨域上尝试过(只是试验)它给出了一个跨域错误&
异常:TypeError:对象[object Window]的属性"function_name"不是函数
所以我有一个由三部分组成的问题
a) 如果我在从child访问parent时遇到问题,这是可以理解的(我已经在处理这个问题,在child iframe中使用另一个iframe(来自parent的域))。但为什么我们在从父母那里访问孩子时会遇到问题,这不是和一样的吗
b) 当我调试时,使用chrome检查器工具&尝试查看document.getElementById('iframe_id').contentWindow
的值,我在它下面看到了我的函数名称,但document.getElementById('iframe_id').contentWindow.function_name()
无法访问它。为什么?
c) 如何从父级成功调用iframe中的javascript函数(没有easyXDM或任何其他插件)?
更多详细信息:
我更喜欢双向通信,因为在中,我的父母会调用iframe中的一个函数,该函数返回一个结果&根据这个结果,父级将决定是否要重定向
我使用了postMessage。看起来是一个更简单的解决方案。
我想做的事:"beforeunload",向子iframe发送消息,作为回调接收响应。基于响应显示消息或导航。
但这是不可能的。
我就是这样解决的:
每次我的孩子框架发生变化时,我都会给家长发一条信息。我收集了这些信息&在"beforeunload"上使用它们来决定是否应该导航或显示消息
您可以使用location.hash轮询。父级更改URL#哈希,子级在setInterval循环中检查更改。http://ajaxian.com/archives/cross-domain-iframe-communication-without-location-polling
就"easyXDM"而言,你本质上是在重新发明轮子。