在 JavaScript 中,是否可以仅在用户位于实际标签/页面上时执行 JavaScript 代码?
比如,如果他切换到另一个标签页,则 JavaScript 进程将暂停,当他返回到该标签页时,JavaScript 将继续执行。
在 JavaScript 中,是否可以仅在用户位于实际标签/页面上时执行 JavaScript 代码?
比如,如果他切换到另一个标签页,则 JavaScript 进程将暂停,当他返回到该标签页时,JavaScript 将继续执行。
除非您使用特定于浏览器的代码或不完全标准的代码(请参见katspaugh的答案),否则没有直接的方法。
设计您的代码使其可以“停止”。这是您必须为您的上下文考虑的事情。
然后添加以下内容:
..
<html>
<head>
</head>
<body>
<script>
window.onblur = function() {
yourStopFunctionHere().
}
</script>
</body>
</html>
在确保窗口已获得焦点的位置插入以下代码:
if(windowHasFocus()) {
//your code here
}
有不同的方法来测试窗口是否拥有焦点:JavaScript / jQuery:测试窗口是否拥有焦点
whenWindowHasFocus(fn); //where fn is the function you want to only run when window has focus
有两种可能的实现方式之一......
function WhenWindowHasFocus(yourFunction){
if(windowHasFocus()) {
yourFunction();
}
setTimeout(function(){ WhenWindowHasFocus(yourFunction); }, 1000);
}
更好的做法是,如果能将与窗口焦点有关的功能(即依赖于窗口具有焦点的功能)封装到一个单独的函数中,然后将该函数“挂钩”到 window.onfocus
。但要注意,不要完全覆盖window.onfocus
函数(否则会撤销刚刚完成的工作)。相反,您可能需要使用某种自定义事件。大多数js框架都提供自定义事件。如果选择这条路,window.onfocus
函数将简单地触发某个自定义事件,您无需手动编写任何带setTimeout的循环代码。
//The below is pseudo-code. custom events differ between js frameworks
window.onfocus = function(){
window.FocusEvent.trigger()
}
function WhenWindowHasFocus(yourFunction){
if(windowHasFocus()) {
yourFunction();
}
window.focusEvent.addOnlyOnce(yourFunction);
}
document.write()
可能不是一个好主意,因为它会毁掉页面 :-) - Pointy