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

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

目录
相关文章
|
6月前
|
Web App开发 前端开发 JavaScript
|
1月前
|
存储 机器人
在阿里云RPA中,你可以通过以下步骤来更改默认唤醒IE浏览器的地址
【2月更文挑战第28天】在阿里云RPA中,你可以通过以下步骤来更改默认唤醒IE浏览器的地址
20 1
|
7月前
|
Web App开发 XML 编解码
IE浏览器下载文件中文文件名乱码问题解决
IE浏览器下载文件中文文件名乱码问题解决
84 0
|
4月前
|
Web App开发 JavaScript 前端开发
JavaScript在IE和标准浏览器下的兼容性处理
JavaScript在IE和标准浏览器下的兼容性处理
41 0
|
5月前
|
前端开发
border-radius 兼容 IE8浏览器
border-radius 兼容 IE8浏览器
40 1
|
5月前
|
Web App开发 移动开发 安全
IE浏览器,和Edge浏览器
IE浏览器,和Edge浏览器
|
5月前
|
JavaScript
兼容IE浏览器
兼容IE浏览器
31 0
|
7月前
|
JSON JavaScript 前端开发
基于FlashWavRecorder实现IE11浏览器录音后用科大讯飞转文字
基于FlashWavRecorder实现IE11浏览器录音后用科大讯飞转文字
58 0
|
7月前
|
编解码 网络协议 开发工具
IE浏览器下如何低延迟播放RTSP或RTMP流
首先,虽然本文是介绍IE浏览器下OCX控件播放RTSP或RTMP,但这种方式并不推荐,毕竟它只能用于IE浏览器环境下,局限太大,而且随着微软IE浏览器的更新,不确定后续支持情况。当然,话说回来,如果是在特定的使用场景下,只需要某些版本IE浏览器支持,但对延迟和稳定性要求非常高,OCX控件方式也不失为一个好的选择。