我有JavaScript,它定期进行活动。当用户没有查看站点时(即窗口或选项卡没有焦点),最好不要运行
有没有一种方法可以使用JavaScript实现这一点
我的参考点是:如果你使用的窗口不活动,Gmail聊天会播放声音
自从最初编写这个答案以来,多亏了W3C,一个新的规范已经达到了推荐状态。 页面可见性API(在MDN上)现在允许我们更准确地检测用户何时隐藏页面
文档。添加了EventListener(“visibilitychange”,onchange);
当前浏览器支持:
- 铬13+
- Internet Explorer 10+
- 火狐10+
- Opera 12.10+[阅读笔记]
在不兼容的浏览器中,以下代码采用了不太可靠的模糊/聚焦方法:
(函数(){
var hidden=“hidden”;
//标准:
如果(隐藏在文档中)
文件。添加的监听器(“可视性更改”,onchange);
如果在文档中((hidden=“mozHidden”),则为else
文件。添加的文件列表(“mozvisibilitychange”,onchange);
如果在文档中((hidden=“webkitHidden”),则为else
文件。添加的文件列表(“webkitvisibilitychange”,onchange);
如果在文档中((hidden=“msHidden”),则为else
文件。添加的监听器(“msvisibilitychange”,onchange);
//IE 9及以下版本:
else if(文件中的“onfocusin”)
document.onfocusin=document.onfocusout=onchange;
//所有其他:
其他的
window.onpageshow=window.onpagehide
=window.onfocus=window.onblur=onchange;
功能更改(evt){
var v=“可见”,h=“隐藏”,
evtMap={
焦距:v,焦距输入:v,页面显示:v,模糊:h,焦距输出:h,页面隐藏:h
};
evt=evt | | window.event;
if(evt.type在evtMap中)
document.body.className=evtMap[evt.type];
其他的
document.body.className=此[隐藏]?“隐藏”:“可见”;
}
//设置初始状态(但仅当浏览器支持页面可见性API时)
如果(文档[隐藏]!==未定义)
onchange({type:document[hidden]?“blur”:“focus”});
})();
IE 9及更低版本需要使用onfocusin和onfocusout,而所有其他版本都使用onfocus和onblur,iOS除外,iOS使用onpageshow和onpagehide