如何在IE8中禁用body.blur()?

3
我在一款运行于IE8浏览器的企业web应用程序上工作。它似乎在body元素上调用了"blur()"方法,导致IE窗口被发送到后台。不幸的是,这段代码位于由供应商控制的应用程序部分中。
是否有可能防止在body元素上调用"blur()"方法而不修改实际调用"body.blur()"代码的方法?
由于这是企业应用程序,所以除了对应用程序本身的更改之外的解决方案是可以接受的。例如,更改IE8设置、注册表等。

@asawyer - 寻求快速答案。虽然我们会向供应商提出错误报告,但是通过这个过程,他们给我们有用的东西需要一个月...如果有的话。 - Michael
当然,也许他们有一个非常好的理由来解释为什么要以那种方式完成。 - asawyer
没有任何理由需要在 body 上调用 blur()。据我所知,这只有在 IE8 和 9 中才可能发生。我们最近从 IE6 升级,那时问题变得明显起来。 /例如,此供应商部分是我们应用程序中的工具栏,导致整个窗口被发送到后台。 - Michael
5个回答

2
你应该能够将blur硬编码到一个虚拟方法中。如果你可以在它被调用之前进入,只需调用body.blur = function() {};(假设body指向你的DOM body元素)。

简直不敢相信我竟然没想到这个... 我一有机会就试试。谢谢 Ishmael。 - Michael

1

使用jQuery,您可以简单地阻止事件:

$('body').blur(function(e) { e.preventDefault(); });

我们不使用jQuery,将该框架添加到我们的应用程序中是不可行的。谢谢。 - Michael
那么伊斯梅尔的回答可能是你能做的最好的。 - werfu

0
document.body.blur=function(){document.body.focus()}

0

0

我在使用JavaScript编辑器CLEditor时遇到了问题,如果我在它上面使用jQuery blur()方法,IE窗口会转到后台。 CLEditor有它自己的iframe,其中有它自己的body。当你提取那个body并使用body.blur()时,IE浏览器将转到后台。

其他浏览器没有显示这种行为,所以如果您遇到这种情况,最好使用FF或Chrome。

如果您删除body.blur(),可能比现在在IE上遇到的问题少一些,但仍然可能会遇到一些小错误(某些地方失去焦点),但我想您可以应付。但是,如果blur()事件被丰富了一些逻辑,那么可能会出现问题-然后找到它的定义并将逻辑移动到某个其他事件中,该事件随浏览器启动(onload或ready)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接