在浏览器中有一种方法可以确定页面当前是否可见?

时间:2012-01-09 15:51:43

标签: javascript browser

我读过:

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

3 个答案:

答案 0 :(得分:1)

你做不到。用户代理不会泄露此信息。

毕竟,它没有太多意义恕我直言。如果用户有两个更大的窗口,其中一个是部分可见的,该怎么办?完全隐藏?都不活跃?被其他一些申请所涵盖?

我认为这与您的结果非常接近:向您的mousemove元素添加focuskeydownscrollbody个侦听器,以及期望该页面在另一个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支持此功能。

Demo