确定当前自己的iframe

问题描述 投票:2回答:4

哪些是确定的最佳方法?iframe 页面正在显示的DOM元素?

我需要在iframe的内容被显示时通知父窗口 真的 完成加载(iframe onload 看起来像一个WebKit的骗局)。)

考虑以下情况。

  • 父窗口加载一个新的iframe
  • 被加载的iframe从父窗口调用一个函数,并发送一个对其iframe DOM元素的引用(类似于 "sender "参数)。
  • 父窗口的调用函数会销毁iframe。

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

我面临的一个问题是,Safari Chrome WebKit 浏览器显然会启动 iframe 的 onload 事件太早--我试着将表单数据(带文件上传)发送至iframe,结果发生了 onload 处理程序清除 <input type="file" /> 元素的值,并破坏iframe,导致表单的提交被 夭折所以我不能使用 onload 在这种情况下(顺便说一下,这是一个功能还是一个错误?)。

另一种情况是iframe做了一些事情,并希望与父元素交互。

javascript dom iframe dom-events onload
4个回答
1
投票

像Stefaan id说 window.parent 但你应该检查 window.frameElement 也。


2
投票

有了 window.parent 你可以得到父窗口。你也可以调用它的方法。因此,通过下面的代码,你可以通知iframe父窗口你已经完成了加载(你需要在父窗口中有一个notifyLoaded函数。

window.parent.notifyLoaded(window);

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


1
投票

一个框架和它的父框架之间有几种沟通方式。

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

如果没有,有几种不同的方法来进行跨域通信,例如通过设置读取iframe url的hash-component。

点击这里查看更多信息


1
投票

你可以走遍父文档中的所有iframe元素,然后将iframe元素的contentWindow属性与iframe中的window-object进行比较(应该是相等的,但我还没有测试)

P.S.:现在测试了一下,工作正常。http:/www.jsfiddle.netdoktormolleCMdLZ

© www.soinside.com 2019 - 2024. All rights reserved.