我有一个正在不断的基础(每10秒一次)上XMLHTTP请求一个JavaScript计时器。 我很想能够暂停计时器,当窗口或标签失去焦点。
我充分认识到onFocus
和onBlur
的事件上的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>
有没有人在那里拥有确定当浏览器窗口或选项卡丢失/收益的重点是在所有流行的浏览器上运行跨技术?
上面的代码在工作正常Safari v3.0.4
(WebKit的530+),该bug已得到解决,似乎。 我已经检查了Google Chrome v3.0.195.27
和它具有相同的Safari浏览器的bug,虽然它具有的WebKit的更新版本。
有关于这个话题的另一个堆栈溢出问题。 他们没有解决分页浏览问题存在。 他们给它进入一些细节上的链接,虽然不使用jQuery。
有没有一种方法来检测,如果浏览器窗口不是当前处于活动状态?
我不认为焦点/模糊事件与分页浏览功能在Safari在所有的工作。 有些人建议的鼠标事件,像这种鼠标离开/的mouseenter。
我有一些UI问题,像这样的自己,所以如果我发现什么,我会在这里跟进。
我以前拼命试图找到这样的事情促使我得出结论,有没有这样的动物。
哦,我怎么会爱是错误的。
<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>
有一点要考虑的是, 标签 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?