2013-03-13 96 views
0

我想檢測瀏覽器窗口是否焦點並殺死ajax調用,如果它不是。基本上,如果用戶閒置了一段時間,那麼ajax殺死將會消失,但是一旦瀏覽器進入焦點,它將重新開始。我認爲Facebook做到了。Setinterval和焦點jquery

以下是我有:

$(document).ready(function(){ 

     // window.onunload = function(){alert('closing')}; 

     // mainmode(); 

     $('#alertbox').click(function(){ 
       $('#alertbox').slideUp("slow"); 
     }); 


     setInterval(function(){ 

      // Check focal point 
      var window_focus = true; 

      $(function() { 
       $(window).focus(function() { 
        window_focus = true; 
        console.log('Focus'); 
       }); 

       $(window).blur(function() { 
        window_focus = false; 
        console.log('Blur'); 
       }); 
      }); 


      if(window_focus == true){ 
       console.log('in focus'); 
       waitForMsg(); 
      }else{ 
       console.log('out of focus'); 
      } 

     }, 5000); 





    }); 

waitformsg是我的AJAX調用。我只是設置了一個5秒的時間間隔,而且在我的測試瀏覽器上似乎很瘋狂。這可能不是做這件事的最好方法。

這似乎並沒有殺死我的ajax調用,而是乘以它。我應該使用xhr.abort()嗎?

感謝您的幫助。

+0

您可能想要查看requestAnimFrame。這些僅在瀏覽器處於焦點時才執行。 – 2013-03-13 18:05:01

+0

@JustinThomas似乎更喜歡動畫而不是邏輯焦點/模糊操作。如果你認爲我可以使用它,你可以發佈一個答案嗎? – greycode 2013-03-13 18:11:22

+0

這是,但沒什麼可說的,你不能用它來做你正在做的事情。 – 2013-03-14 01:34:39

回答

0

修改後的代碼;

$(document).ready(function(){ 

    // window.onunload = function(){alert('closing')}; 

    // mainmode(); 

    $('#alertbox').click(function(){ 
      $('#alertbox').slideUp("slow"); 
    }); 
    // Check focal point 
    var window_focus = true; 


      $(window).focus(function() { 
       window_focus = true; 
       console.log('Focus'); 
      }); 

      $(window).blur(function() { 
       window_focus = false; 
       console.log('Blur'); 
      }); 


    setInterval(function(){ 
     if(window_focus == true){ 
      console.log('in focus'); 
      waitForMsg(); 
     }else{ 
      console.log('out of focus'); 
     } 

    }, 5000); 
}); 
+0

這看起來像它會工作,除了我的阿賈克斯殺死仍然運行..有一個settimeout在那裏。有沒有辦法殺死任何運行的Ajax調用? xhr.abort? – greycode 2013-03-13 18:14:43

+0

我認爲你應該停止向window.blur之後的服務器發送請求。如果您真的要放棄您的請求(如果它需要非常大的服務器資源),請使用xhr.abort。 – Anoop 2013-03-13 18:22:39

+0

我無法中止..檢查我的新問題:http://stackoverflow.com/questions/15393465/kill-ajax-session-outside-of-originating-function – greycode 2013-03-13 18:25:45