2013-03-13 3 views
0

Я пытаюсь определить, находится ли окно браузера в фокусе и убить вызовы ajax, если это не так. В принципе, если пользователь простаивает в течение определенного времени, тогда убийства ajax умрут, но начнутся снова, как только браузер начнет фокусироваться. Я думаю, что Facebook это делает.Setinterval и Focus 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 мой Аякса вызов. Я просто установил 5-секундный интервал, и, похоже, он сходит с ума в моем тестовом браузере. Вероятно, это тоже не лучший способ сделать это.

Это также, кажется, не убивает мой вызов ajax, а вместо этого умножает его. Должен ли я использовать xhr.abort()?

Спасибо за помощь.

+0

Возможно, вы захотите посмотреть запросAnimFrame. Они выполняются только в том случае, если браузер находится в фокусе. –

+0

@ JustinThomas кажется больше для анимации, чем операции с логическим фокусом/размытием. Если вы думаете, что я могу использовать это, вы можете отправить ответ? – greycode

+0

Это так, но нечего сказать, что вы не могли использовать его для своего дела. –

ответ

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

Похоже, что это сработает, за исключением того, что у меня все еще работает ajax kill. Там есть привязка. Есть ли способ убить любые вызовы ajax? xhr.abort? – greycode

+0

Я думаю, вам следует прекратить отправку запроса на сервер после window.blur. используйте xhr.abort, если вы действительно хотите прервать свой запрос (в случае, если он занимает очень большой серверный ресурс). – Anoop

+0

Я не могу отменить .. Проверьте мой новый вопрос: http://stackoverflow.com/questions/15393465/kill-ajax-session-outside-of-originating-function – greycode