有没有一种可靠的方法来确定是否一个浏览器标签或窗口不活动或在重点是什么?(Is there a re

2019-06-27 08:19发布

我有一个正在不断的基础(每10秒一次)上XMLHTTP请求一个JavaScript计时器。 我很想能够暂停计时器,当窗口或标签失去焦点。

我充分认识到onFocusonBlur的事件上的window对象,但他们没有在所有浏览器可靠地触发。 例如, 在Safari浏览器,标签不触发事件 。

下面简单的代码提炼我在寻找的功能:

<html>
  <head>
    <title>Testing</title>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>
  </head>
  <body>
    <div id="console"></div>
    <script type="text/javascript">
      window.onfocus = function(event) {
        $('console').insert('Window gained focus<br />');
      }

      window.onblur = function(event) {
        $('console').insert('Window lost focus<br />');
      }
    </script>
  </body>
</html>

有没有人在那里拥有确定当浏览器窗口或选项卡丢失/收益的重点是在所有流行的浏览器上运行跨技术?

Answer 1:

上面的代码在工作正常Safari v3.0.4 (WebKit的530+),该bug已得到解决,似乎。 我已经检查了Google Chrome v3.0.195.27和它具有相同的Safari浏览器的bug,虽然它具有的WebKit的更新版本。



Answer 2:

有关于这个话题的另一个堆栈溢出问题。 他们没有解决分页浏览问题存在。 他们给它进入一些细节上的链接,虽然不使用jQuery。

有没有一种方法来检测,如果浏览器窗口不是当前处于活动状态?

我不认为焦点/模糊事件与分页浏览功能在Safari在所有的工作。 有些人建议的鼠标事件,像这种鼠标离开/的mouseenter。

我有一些UI问题,像这样的自己,所以如果我发现什么,我会在这里跟进。



Answer 3:

我以前拼命试图找到这样的事情促使我得出结论,有没有这样的动物。

哦,我怎么会爱是错误的。



Answer 4:

<script>

    // Adapted slightly from Sam Dutton
    // Set name of hidden property and visibility change event
    // since some browsers only offer vendor-prefixed support
    var hidden, state, visibilityChange; 
    if (typeof document.hidden !== "undefined") {
        hidden = "hidden";
        visibilityChange = "visibilitychange";
        state = "visibilityState";
    } else if (typeof document.mozHidden !== "undefined") {
        hidden = "mozHidden";
        visibilityChange = "mozvisibilitychange";
        state = "mozVisibilityState";
    } else if (typeof document.msHidden !== "undefined") {
        hidden = "msHidden";
        visibilityChange = "msvisibilitychange";
        state = "msVisibilityState";
    } else if (typeof document.webkitHidden !== "undefined") {
        hidden = "webkitHidden";
        visibilityChange = "webkitvisibilitychange";
        state = "webkitVisibilityState";
    }

    // Add a listener that constantly changes the title
    document.addEventListener(visibilityChange, function() {
        document.title = document[state];
    }, false);

    // Set the initial value
    document.title = document[state];

</script>


Answer 5:

有一点要考虑的是, 标签 focus / blur正在阻止浏览器厂商的事件可能是为了保护用户的方式。 有些浏览器允许alert()式的弹出窗口(甚至,我认为,一个focus()方法),以使标签重新获得焦点。 阻断focus / blur为标签交换事件可以类似于针对,例如,未被请求的弹出窗口和窗口大小/定位/关闭保护。



文章来源: Is there a reliable way to determine if a browser tab or window is inactive or not in focus?