2015-10-07 2 views
0

Я создаю чат, который должен получать сообщения с PHP с помощью AJAX в промежутках. Проблема в том, что пользователи могут открывать несколько вкладок в разных чатах, и это займет много ресурсов с сервера. Итак, как я могу остановить функцию на других вкладках, когда пользователь переключает страницу, а затем реагирует на нее, когда они возвращаются на вкладку. Я не являюсь новым для кодирования поэтому, пожалуйста, держать код как можно более простым (NO JQuery пожалуйста.)как остановить функцию Javascript, когда пользователь переключает вкладку или сводит к минимуму broswer

Вот функция тестирования я пытался, но не повезло:

function window_active(){ 
    window.onfocus = function() { 
     test() 
    }; 

     window.onblur = function() { 
      //stop the script OR change the setTimeout so the functon run less. 
     }; 
    } 

    function test(){ 
     alert('adadasdad'); 
     setTimeout(function(){}, 10000); 
    } 

Спасибо заранее. (:

Update: requestAnimationFrame() не работал

function loop() { 
    var div_id = document.getElementById('tester'); 
    var msg = document.createTextNode("sadksadkjsahdjkasdjkahdjkas"); 
    div_id.appendChild(msg); 

    setTimeout(function() { 
     requestAnimationFrame(function() { 
      loop(); 
     }); 
    }, 1000); 
} 

Update 2:. Counldn't найти этот ответ где-нибудь, а потом мне повезло, и нашел эту страницу с помощью из ehynds ответа о "document.hidden" Спасибо ehynds (:.!

function loop() { 

    //do stuff. 

    setTimeout(function() { 
     if(document.hasFocus()){ 
     //"document.hasFocus()" return **true** only if your on the tab. 
       loop(); 
      } 
     }, 1000); 

     window.onfocus = function() { 
      //reactivted the function. 
      loop(); 
     }; 
    } 

Hopes это поможет кому-то ищет ответ (:.

+0

'window.requestAnimationFrame' – zerkms

+0

Можете ли вы показать пример, пожалуйста? :/ – toastext

ответ

4

HTML5 видимость API:

document.addEventListener('visibilitychange', function() { 
    document.hidden; // whether or not the tab is visible 
}); 
+0

Спасибо! Спасибо! Спасибо!! Спасибо, что помогли мне найти ответ! (: – toastext

Смежные вопросы