2014-12-30 35 views
1

我有一个有趣的问题,我需要解决。简而言之,Internet Explorer使用window.onblur事件将元素聚焦到iFrame中。因为这是一个递归,你不能点击iFrame之外的任何东西。 IE9,IE10,IE11(不是IE8及以下)出现问题。Internet Explorer Iframe递归window.onblur

测试在这里:Try it (in IE)

在这里下载:Download it

我真正的问题是: 有没有办法从外面的iFrame覆盖iFrame中的window.onblur事件?这是一个错误,我应该向微软报告这个地方吗?

更新

感谢您的帮助@Jonathan桑普森,这种工作方式可以在这里看到:

See working example - 你必须等待,直到IFrame的满载能够覆盖它

回答

0

我在Internet Explorer团队工作,很乐意为您考虑这个问题。要回答您在iframe中覆盖onblur处理程序的问题,此如果这两个文档共享一个公用域,则可能是可能的。在你的例子中,情况就是这样。

document.querySelector("iframe").contentWindow.onblur = null; 

或者,你可能只需要绑定到使用window.top最高的窗口。

+0

感谢您的光临。确实有效。但是你需要等到IFrame被加载或者它会被覆盖。我希望有一种从IFrame之外做到这一点的好方法,但是这个问题是通过这个答案解决的。 – CodingYourLife

+0

@CodingYourLife理想情况下,你应该改变* iframe中的代码*,以便它绑定到'window.top',或者如果'window!== window.top'只是拒绝向'onblur'添加句柄。如果您需要从顶部窗口进行更改,您可以绑定到iframe的'DOMContentLoaded'或'Load'事件并在那里运行您的代码,从而避免使用'setTimeout'。 – Sampson

+0

解决方法解决了我的具体问题。在我的情况下,我有一个标签导航,改变了iFrame src(没有其他方式)。我无法挂载加载事件(也无法访问iFrame内容页面),甚至尝试每1秒重置一次onblur,但我甚至可以在调试器中看到onblur在该行后面没有设置为null。我所做的是在页面上发布了一个新的onblur事件,包括询问用户是否想离开当前标签的iFrame。如果是,我将IFrame src设置为about:blank,然后覆盖onblur。 - >把它变成一个“功能”^^ – CodingYourLife