确定页面显示的iframe
DOM元素的最佳方法是什么?
当iframe的内容真的完成加载时,我需要通知父窗口(iframe onload
看起来像是一个使用WebKit的骗局)。
考虑以下情况:
对这种帧间通信的替代解决方案的建议也很受欢迎。
我遇到的一个问题是Safari / Chrome / WebKit浏览器显然过早地触发了iframe的onload
事件 - 我尝试将表单数据(带文件上传)发送到iframe并拥有onload
处理程序清除<input type="file" />
元素的值并销毁iframe,导致表单提交中止,因此在这种情况下我不能使用onload
(顺便说一下,是一个功能还是bug?)。
另一个用例是iframe执行某些操作并希望与父级进行交互。
答案 0 :(得分:2)
使用 window.parent ,您可以获得父窗口。你也可以在上面调用方法。因此,使用以下代码,您可以通知已完成加载的iframe父级(您需要在父窗口中使用notifyLoaded函数。
window.parent.notifyLoaded(window);
因为我们提供了自己的窗口,所以父级可以循环所有已知的iframe并检查加载哪个iframe(使用 iframe.contentWindow 来获取某个iframe的窗口)
答案 1 :(得分:1)
有几种方法可以在一个框架和它的父框架之间进行通信。
最简单的是,如果两者都设置相同的document.domain
,在这种情况下,他们可以直接进行通信。
如果没有,有几种不同的方式进行跨域通信,例如通过设置/读取iframe网址的哈希组件
答案 2 :(得分:1)
您可以遍历父文档中的所有iframe元素,并将iframe元素的contentWindow属性与iframe内的window-object进行比较(应该相等,但我还没有测试它)
P.S。:现在测试它,工作正常http://www.jsfiddle.net/doktormolle/CMdLZ/
答案 3 :(得分:1)
与Stefaan ID一样window.parent
,但您也应该检查window.frameElement。