有没有办法检测浏览器窗口当前是否处于活动状态?
2022-08-29 22:33:36
我有JavaScript定期做活动。当用户不查看网站时(即窗口或选项卡没有焦点),最好不要运行。
有没有办法使用JavaScript来做到这一点?
我的参考点:如果您使用的窗口未处于活动状态,Gmail聊天会播放声音。
我有JavaScript定期做活动。当用户不查看网站时(即窗口或选项卡没有焦点),最好不要运行。
有没有办法使用JavaScript来做到这一点?
我的参考点:如果您使用的窗口未处于活动状态,Gmail聊天会播放声音。
自从最初编写此答案以来,由于W3C,新规范已达到推荐状态。页面可见性API(在MDN上)现在允许我们更准确地检测页面何时对用户隐藏。
document.addEventListener("visibilitychange", onchange);
当前浏览器支持:
以下代码回退到不兼容浏览器中不太可靠的模糊/对焦方法:
(function() {
var hidden = "hidden";
// Standards:
if (hidden in document)
document.addEventListener("visibilitychange", onchange);
else if ((hidden = "mozHidden") in document)
document.addEventListener("mozvisibilitychange", onchange);
else if ((hidden = "webkitHidden") in document)
document.addEventListener("webkitvisibilitychange", onchange);
else if ((hidden = "msHidden") in document)
document.addEventListener("msvisibilitychange", onchange);
// IE 9 and lower:
else if ("onfocusin" in document)
document.onfocusin = document.onfocusout = onchange;
// All others:
else
window.onpageshow = window.onpagehide
= window.onfocus = window.onblur = onchange;
function onchange (evt) {
var v = "visible", h = "hidden",
evtMap = {
focus:v, focusin:v, pageshow:v, blur:h, focusout:h, pagehide:h
};
evt = evt || window.event;
if (evt.type in evtMap)
document.body.className = evtMap[evt.type];
else
document.body.className = this[hidden] ? "hidden" : "visible";
}
// set the initial state (but only if browser supports the Page Visibility API)
if( document[hidden] !== undefined )
onchange({type: document[hidden] ? "blur" : "focus"});
})();
onfocusin
并且对于 IE 9 及更低版本是必需的,而所有其他 IE 都使用 和 ,但 iOS 除外,它使用 和 。onfocusout
onfocus
onblur
onpageshow
onpagehide
我会使用jQuery,因为这样你所要做的就是:
$(window).blur(function(){
//your code here
});
$(window).focus(function(){
//your code
});
或者至少它对我有用。