2012-05-25 48 views
1

说我有两个单独的浏览器窗口打开:只有当窗口焦点时,Javascript才会执行定时器功能?

function onload() { 
    setTimeout("dosomething", 2000); 
} 

function dosomething() { 
    $.ajax({ 
     url: "someurl", 
     success: function (data) { 
      document.write("Hello"); 
     } 
    }); 
    setTimeout("dosomething", 2000); 
} 

我想要让这个招呼每两秒钟打印,只有当窗口处于焦点。如果窗口没有焦点,那么定时器将基本上暂停(换句话说,定时器将停止滴答,不会调用dosomething),直到用户点击未聚焦的浏览器窗口,计时器将恢复并且你好词将继续被打印,而另一个窗口将停止计时器,反之亦然。

我该如何做到这一点?

+4

**永不**将字符串传递给'setInterval()'或'setTimeout()'。这样做与使用'eval()'一样糟糕,并且只要使用变量,就会导致不可读和可能不安全的代码,因为您需要将它们插入到字符串中,而不是传递实际变量。正确的解决方案是'setInterval(function(){/ * your code *)},msecs);'。 'setTimeout()'同样适用。如果你只想调用一个没有任何参数的函数,你也可以直接传递函数名:'setInterval(someFunction,msecs);'(注意函数名后面有** no **'()') – ThiefMaster

回答

0

这是棘手的,并依赖于浏览器。

var timer;  
function onBlur() { 
    timer = setTimeout("dosomething", 2000); 
}; 
function onFocus(){ 
    clearTimeout(timer); 
}; 
if (/*@[email protected]*/false) { // check for Internet Explorer 
    document.onfocusin = onFocus; 
    document.onfocusout = onBlur; 
} else { 
    window.onfocus = onFocus; 
    window.onblur = onBlur; 
} 
0
var someVar = false; 
window.onfocus = function() { someVar = true; }; 
window.onblur = function() { someVar = false; }; 
var time; 

function timer(someVar) { 
    if (someVar == true) { 
     setTimeOut('time++', 1); 
    } 
} 

function something() { 
    time = 0; 
    while (time <= 2000) { 
     timer(someVar); 
     document.getElementById('time').innerHTML = time; 
    } 
} 
相关问题