确定当前/自己的iframe

时间:2011-01-14 13:51:32

标签: javascript dom iframe javascript-events onload

确定页面显示的iframe DOM元素的最佳方法是什么?

当iframe的内容真的完成加载时,我需要通知父窗口(iframe onload看起来像是一个使用WebKit的骗局)。

考虑以下情况:

  • 父窗口加载新的iframe
  • 加载的iframe从父窗口调用一个函数,并沿着对其iframe DOM元素的引用发送(类似于“sender”参数)。
  • 父母调用的函数会破坏iframe。

对这种帧间通信的替代解决方案的建议也很受欢迎。

我遇到的一个问题是Safari / Chrome / WebKit浏览器显然过早地触发了iframe的onload事件 - 我尝试将表单数据(带文件上传)发送到iframe并拥有onload处理程序清除<input type="file" />元素的值并销毁iframe,导致表单提交中止,因此在这种情况下我不能使用onload(顺便说一下,是一个功能还是bug?)。

另一个用例是iframe执行某些操作并希望与父级进行交互。

4 个答案:

答案 0 :(得分:2)

使用 window.parent ,您可以获得父窗口。你也可以在上面调用方法。因此,使用以下代码,您可以通知已完成加载的iframe父级(您需要在父窗口中使用notifyLoaded函数。

window.parent.notifyLoaded(window);

因为我们提供了自己的窗口,所以父级可以循环所有已知的iframe并检查加载哪个iframe(使用 iframe.contentWindow 来获取某个iframe的窗口)

答案 1 :(得分:1)

有几种方法可以在一个框架和它的父框架之间进行通信。

最简单的是,如果两者都设置相同的document.domain,在这种情况下,他们可以直接进行通信。

如果没有,有几种不同的方式进行跨域通信,例如通过设置/读取iframe网址的哈希组件

Look here for more information

答案 2 :(得分:1)

您可以遍历父文档中的所有iframe元素,并将iframe元素的contentWindow属性与iframe内的window-object进行比较(应该相等,但我还没有测试它)

P.S。:现在测试它,工作正常http://www.jsfiddle.net/doktormolle/CMdLZ/

答案 3 :(得分:1)

与Stefaan ID一样window.parent,但您也应该检查window.frameElement