【问题标题】:Internet Explorer Iframe recursive window.onblurInternet Explorer iframe 递归 window.onblur
【发布时间】:2014-12-31 08:09:07
【问题描述】:

我有一个有趣的问题需要解决。简而言之,Internet Explorer 使用 window.onblur 事件来聚焦 iFrame 中的元素。因此,它是一个递归,您不能单击 iFrame 之外的任何内容。 IE9、IE10、IE11(非IE8及以下)出现问题。

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

在此处下载:Download it

我真正的问题是: 有没有办法从 iFrame 外部覆盖 iFrame 内的 window.onblur 事件?这是一个错误吗?我应该在某个地方向 Microsoft 报告吗?

更新

感谢@Jonathan Sampson 的帮助,这可以在这里看到:

See working example - 您必须等到 IFrame 完全加载后才能覆盖它

【问题讨论】:

    标签: javascript internet-explorer iframe recursion onblur


    【解决方案1】:

    我在 Internet Explorer 团队工作,很乐意为您调查此事。要回答您关于在 iframe 中覆盖 onblur 处理程序的问题,如果两个文档共享一个公共域,这可能的。在您的示例中就是这种情况。

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

    或者,您可能只想使用window.top 绑定到最高窗口。

    【讨论】:

    • 感谢您的浏览。确实有效。但是你需要等到 IFrame 被加载,否则它会被覆盖。我希望有一种从 IFrame 外部执行此操作的好方法,但问题已通过此答案解决。
    • @CodingYourLife 理想情况下,您应该更改代码 within iframe,使其绑定到 window.top,或者在 @987654326 时拒绝将处理程序添加到 onblur @。如果您需要从顶部窗口进行更改,您可以绑定到 iframe 的 DOMContentLoadedLoad 事件并在那里运行您的代码,而无需使用 setTimeout
    • 通过变通方法解决了我的具体问题。就我而言,我有一个选项卡式导航,它改变了 iFrame src(没有其他方法)。我无法连接到加载事件(也无法访问 iFrame 内容页面),甚至尝试每 1 秒重置一次 onblur,但我什至可以在调试器中看到 onblur 在行后没有设置为 null。我所做的是页面上的一个新 onblur 事件,包括询问用户是否要离开当前选项卡的 iFrame。如果是,我将 IFrame src 设置为 about:blank,然后覆盖 onblur。 -> 把它变成一个“功能”^^
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 2013-09-17
    • 2011-06-23
    • 1970-01-01
    • 2012-01-14
    • 2010-10-21
    • 2010-12-14
    • 2011-06-17
    相关资源
    最近更新 更多