2015-05-04 107 views
0

我试图检测窗口/选项卡当前是否焦点或not.My代码工作正常,以检测焦点失去当我切换选项卡,但它失败,如果当前窗口被某些应用程序(音乐播放器或任何其他软件)。我知道重点检查可以用很多方式完成,但我有兴趣有一个基于我的代码的解决方案。可以有人告诉我为什么下面的代码不能按预期工作?为什么onblur不能正常发射?

$(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 (/*@[email protected]*/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; 
    } 

}); 

回答

0

阅读Using the Page Visibility API

当在窗口上登记的onblur /聚焦状态相比,处理,一个关键的区别是,当被激活另一个窗口,浏览器窗口失去焦点页面不会被隐藏。只有当用户切换到不同的选项卡或最小化浏览器窗口时,页面才会隐藏。

您的代码应该按照您期望的方式在不支持Visibility API的浏览器中运行。