IE6下focus与blur错乱的解决方案

简介: Miller同学发现的IE6 bug:如以下代码,点击textarea时,引发window的blur,导致focus与blur配对混乱: hello window.onblur=function(){ document.title= 'blur:' + Math.random() ; } window.onfocus=function(){ document.title= 'focus:' + Math.random() ; } 这应该是一个很常见的需求,例如,当前窗口定期更新数据,而窗口失焦则减少信息更新频率。

Miller同学发现的IE6 bug:如以下代码,点击textarea时,引发window的blur,导致focus与blur配对混乱:

<body> <textarea></textarea> hello<script> window.onblur=function(){
    document.title= 'blur:' + Math.random() ;
}
window.onfocus=function(){
    document.title= 'focus:' + Math.random() ;
}</script> </body> 

这应该是一个很常见的需求,例如,当前窗口定期更新数据,而窗口失焦则减少信息更新频率。IE6的bug导致的配对混乱却会打乱我们的计划。

上网查也没查出关于这个bug的官方说明也推荐解决方案,只好自己生更的实现一个解决方案。

代码如下:Venus'Blog

<body> <textarea></textarea> hello<script> (function(){
    var focusTimer = 0;
    function myBlur(){
        document.title= 'blur:' + Math.random() ;
    }
    function myFocus(){
        clearTimeout(focusTimer);
        focusTimer = setTimeout(function(){
            document.title = 'focus:' + Math.random() ;
        },10);
    }
    window.onfocus = document.body.onfocusin = myFocus;
    window.onblur = document.body.onfocusout = myBlur;
}());</script> </body>

大略原理是:找到很多可能触发onfocus与onblur的时机,所有的onblur都立即执行,而onfocus则延时10毫秒懒惰执行。

结果是:虽说有时多执行了几次myFocus与myBlur,但能保证窗口状态的正确性。Venus'Blog

方法可能有点山寨,不过一时没想到更好的办法,这样也暂时能解个燃眉之急。

目录
相关文章
|
JavaScript
ie8 ie浏览器下载excel文件乱码,变成压缩包,解决方案
ie8 ie浏览器下载excel文件乱码,变成压缩包,解决方案
214 0
|
安全
Selenium在Win10下IE浏览器遇到的白屏初始页面解决方案
开发环境:Win10+Python3.5+Selenium+IE11硬件环境:联想MIIX700语言环境:English(US)在做数据爬取得时候,发现IE Driver出现白屏,跟着提示:“This is the initial start page for the WebDriver server“几经寻找,解决了问题。
2052 0
|
Web App开发 移动开发 JavaScript
|
Web App开发 JavaScript 前端开发
Vue 兼容 ie9 的全面解决方案
Vue 官方对于 ie 浏览器版本兼容情况的描述是 ie9+,即是 ie9 及更高的版本。经过测试,Vue 的核心框架 vuejs 本身,以及生态的官方核心插件(VueRouter、Vuex等)均可以在 ie9 上正常使用。
2419 0
|
JavaScript 前端开发 .NET
关于IE10出现LinkButton点击无效的解决方案
关于IE10出现LinkButton点击无效的情况:         一般高配置的系统如Win7旗舰版SP1系统不会出现这种情况,针对家庭普通版和专业版的用户通过测试都有这种情况,对于开发人员要解决不同系统和IE的兼容问题一时有点摸不着头脑,可能微软发布IE10正式版本不久,兼容问题没有考虑周全,...
1428 0