我读过:
Determine if window is active in webkit
并尝试了演示:
http://www.thefutureoftheweb.com/demo/2007-05-16-detect-browser-window-focus/
但这适用于焦点,焦点可能会丢失到另一个窗口,而页面仍然可见(如果其他窗口没有最大化)。
我正在寻找的是一个值,当页面可见时为真,如果不是(或过渡中的事件)则为假。
编辑:我想我真正想要的是“这个浏览器是否与我的setIntervals和setTimeouts混淆”。
编辑:看起来正在整理出来:https://developer.mozilla.org/en/API/PageVisibility/Page_Visibility_API
答案 0 :(得分:1)
你做不到。用户代理不会泄露此信息。
毕竟,它没有太多意义恕我直言。如果用户有两个更大的窗口,其中一个是部分可见的,该怎么办?完全隐藏?都不活跃?被其他一些申请所涵盖?
我认为这与您的结果非常接近:向您的mousemove
元素添加focus
,keydown
,scroll
和body
个侦听器,以及期望该页面在另一个x
秒超时时可见,我不知道x
的合理值是什么。
更新:作为对以下评论的回复,这里有一个片段,可以检测到间隔时间是否正常:
(function () {
var requiredResolution = 10; // ms
var checkInterval = 1000; // ms
var tolerance = 20; // percent
var counter = 0;
var expected = checkInterval / requiredResolution;
//console.log('expected:', expected);
window.setInterval(function () {
counter++;
}, requiredResolution);
window.setInterval(function () {
var deviation = 100 * Math.abs(1 - counter / expected);
// console.log('is:', counter, '(off by', deviation , '%)');
if (deviation > tolerance) {
console.warn('Timer resolution not sufficient!');
}
counter = 0;
}, checkInterval);
})();
答案 1 :(得分:0)
尝试
if (/*@cc_on!@*/false) { // check for Internet Explorer
document.onfocusin = onFocus;
document.onfocusout = onBlur;
} else {
window.onfocus = onFocus;
window.onblur = onBlur;
}
然后设置这些功能。
给予应有的信用......见:
Is there a way to detect if a browser window is not currently active?
答案 2 :(得分:0)
原来W3C目前正致力于制定标准:
https://dvcs.w3.org/hg/webperf/raw-file/tip/specs/PageVisibility/Overview.html#sec-page-visibility
但是,目前只有Chrome支持此功能。