171 votes

Comment recharger automatiquement une page après une période d'inactivité donnée ?

Comment puis-je recharger automatiquement une page web, s'il n'y a pas eu d'activité sur la page pendant une période donnée ?

0 votes

Peut-être stackoverflow.com/questions/3729959/ est lié ?

252voto

amosrivera Points 11654

Ceci peut être accompli sans javascript, avec ce métatag :

<meta http-equiv="refresh" content="5" >

où content = "5" sont les secondes que la page attendra avant d'être rafraîchie.

Mais vous avez dit que s'il n'y avait pas d'activité, de quel genre d'activité s'agirait-il ?

4 votes

L'absence d'activité signifie que l'utilisateur final n'est pas sur son bureau ou ne surfe pas sur un autre site. Aucune activité de la souris ou du clavier sur le site auquel je fais référence.

2 votes

Excellente réponse, je pensais que cela devait être fait avec setInterval Je suis si heureux de savoir que cela existe !

17 votes

Même si ce n'est pas la réponse parce qu'elle ne capture pas l'activité, cette question était en tête des résultats de recherche de Google lorsqu'on cherchait simplement un rafraîchissement en javascript. Donc, si vous cherchez simplement à rafraîchir automatiquement la page à un intervalle défini, c'est la solution.

245voto

arturnt Points 2072

Si vous voulez rafraîchir la page s'il n'y a pas d'activité, vous devez trouver comment définir l'activité. Disons que nous rafraîchissons la page toutes les minutes, sauf si quelqu'un appuie sur une touche ou déplace la souris. Cette méthode utilise jQuery pour la liaison d'événements :

<script>
     var time = new Date().getTime();
     $(document.body).bind("mousemove keypress", function(e) {
         time = new Date().getTime();
     });

     function refresh() {
         if(new Date().getTime() - time >= 60000) 
             window.location.reload(true);
         else 
             setTimeout(refresh, 10000);
     }

     setTimeout(refresh, 10000);
</script>

5 votes

Pourquoi définir l'intervalle à 10000 si le calcul se fait avec 60000 ? Pendant au moins 5 tours, il sera faux ?

4 votes

La raison pour laquelle l'intervalle est inférieur au temps d'inactivité est que vous voulez vérifier le temps d'inactivité à une fréquence beaucoup plus élevée que le temps d'inactivité réel. Par exemple, si le temps d'inactivité est de 1 minute et l'intervalle de 1 minute, si l'utilisateur déplace la souris après 1 seconde puis s'arrête, le rafraîchissement ne se produira qu'après 2 minutes. Plus l'intervalle est faible, plus le temps de rafraîchissement sera précis.

61voto

newdark Points 129

J'ai également construit une solution complète en javascript qui ne nécessite pas de jquery. Je pourrais peut-être en faire un plugin. Je l'utilise pour le rafraîchissement automatique des fluides, mais il semble qu'il pourrait vous aider ici.

JSFiddle AutoRefresh

// Refresh Rate is how often you want to refresh the page 
// bassed off the user inactivity. 
var refresh_rate = 200; //<-- In seconds, change to your needs
var last_user_action = 0;
var has_focus = false;
var lost_focus_count = 0;
// If the user loses focus on the browser to many times 
// we want to refresh anyway even if they are typing. 
// This is so we don't get the browser locked into 
// a state where the refresh never happens.    
var focus_margin = 10; 

// Reset the Timer on users last action
function reset() {
    last_user_action = 0;
    console.log("Reset");
}

function windowHasFocus() {
    has_focus = true;
}

function windowLostFocus() {
    has_focus = false;
    lost_focus_count++;
    console.log(lost_focus_count + " <~ Lost Focus");
}

// Count Down that executes ever second
setInterval(function () {
    last_user_action++;
    refreshCheck();
}, 1000);

// The code that checks if the window needs to reload
function refreshCheck() {
    var focus = window.onfocus;
    if ((last_user_action >= refresh_rate && !has_focus && document.readyState == "complete") || lost_focus_count > focus_margin) {
        window.location.reload(); // If this is called no reset is needed
        reset(); // We want to reset just to make sure the location reload is not called.
    }

}
window.addEventListener("focus", windowHasFocus, false);
window.addEventListener("blur", windowLostFocus, false);
window.addEventListener("click", reset, false);
window.addEventListener("mousemove", reset, false);
window.addEventListener("keypress", reset, false);
window.addEventListener("scroll", reset, false);
document.addEventListener("touchMove", reset, false);
document.addEventListener("touchEnd", reset, false);

4 votes

C'est génial. J'aimerais que tu sois plus voté ici. Ne pas utiliser JQuery donne des points bonus importants.

1 votes

* Super / Merci beaucoup. Est-ce que cela tient compte de la détection des événements tactiles ?

1 votes

Hmm tu sais je ne suis pas sûr. Lorsque je l'ai créé, je n'avais pas beaucoup d'expérience avec les iPhone ou les iPads.

23voto

Yuriy Faktorovich Points 33347
<script type="text/javascript">
  var timeout = setTimeout("location.reload(true);",600000);
  function resetTimeout() {
    clearTimeout(timeout);
    timeout = setTimeout("location.reload(true);",600000);
  }
</script>

Ce qui précède rafraîchira la page toutes les 10 minutes, sauf si resetTimeout() est appelé. Par exemple :

<a href="javascript:;" onclick="resetTimeout();">clicky</a>

3 votes

L'évaluation implicite est le mal absolu !

-1voto

FAISAL Points 41

Cette tâche est très facile, il suffit d'utiliser le code suivant dans la section de l'en-tête html.

<head> <meta http-equiv="refresh" content="30" /> </head>

Il rafraîchira votre page après 30 secondes.

2 votes

Dans ma question, nous devons vérifier l'absence d'activité.

0 votes

Oui, vous devez utiliser la technologie Ajax pour modifier le contenu d'une balise html particulière.

0 votes

Utilisez la réponse ci-dessus avec la syntaxe appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X