为什么onblur没有正确射击?

时间:2015-05-04 22:59:46

标签: javascript jquery

我正在尝试检测窗口/选项卡当前是否处于焦点位置。当我在标签之间切换时,我的代码运行良好以检测焦点丢失但如果当前窗口被某些应用程序覆盖则会失败我知道焦点检查可以通过多种方式完成,但我有兴趣根据我的代码提供解决方案。任何人都可以告诉我为什么以下代码没有按预期工作?

$(document).ready(function() {

        var hidden, change, vis = {
            hidden: "visibilitychange",
            mozHidden: "mozvisibilitychange",
            webkitHidden: "webkitvisibilitychange",
            msHidden: "msvisibilitychange",
            oHidden: "ovisibilitychange" /* not currently supported */
        };             
    for (hidden in vis) {
        if (vis.hasOwnProperty(hidden) && hidden in document) {
            change = vis[hidden];
            break;
        }
    }
    if (change)
        document.addEventListener(change, onchange);
    else if (/*@cc_on!@*/false) // IE 9 and lower
        document.onfocusin = document.onfocusout = onchange
    else
        window.onfocus = window.onblur = onchange;

    function onchange (evt) {
        evt = evt || window.event;
        if (evt.type == "focus" || evt.type == "focusin")
           window_focus = true;
        else if (evt.type == "blur" || evt.type == "focusout")
           window_focus = false;
        else        
           window_focus = this[hidden] ? false : true;
    }

});   

1 个答案:

答案 0 :(得分:0)

阅读Using the Page Visibility API

  

与在窗口上注册onblur / onfocus处理程序相比,一个关键的区别是,当另一个窗口处于活动状态且浏览器窗口失去焦点时,页面不会被隐藏。只有当用户切换到其他选项卡或最小化浏览器窗口时,页面才会隐藏。

您的代码应该在您不支持Visibility API的浏览器中按预期工作。