如果用户在实际的选项卡/页面上,在javascript中是否有可能只执行javascript?
例如,如果他切换到另一个选项卡,则javascript过程将暂停,并且当他返回到该选项卡时,javascript将继续该过程。
发布于 2011-06-29 22:40:52
没有直接的方法,除非你使用特定于浏览器的代码,或者不是完全标准的代码(参见katspaugh的答案)。
“‘Stop”解决方案
。。
<html>
<head>
</head>
<body>
<script>
window.onblur = function() {
yourStopFunctionHere().
}
</script>
</body>
</html>
“‘Assert”解决方案
在窗口具有焦点的真正重要的地方插入以下代码:
if(windowHasFocus()) {
//your code here
}
测试窗口是否具有焦点有不同的方法:JavaScript / jQuery: Test if window has focus
异步解决方案
whenWindowHasFocus(fn); //where fn is the function you want to only run when window has focus
存在两种可能的实现之一.....
通过setTimeout等待
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);
}
https://stackoverflow.com/questions/6522399
复制相似问题