2012-05-25 89 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; 
    } 
} 
相關問題