2010-07-14 6 views
13

Je suis curieux de savoir s'il existe un moyen de détecter spécifiquement l'événement d'actualisation du navigateur dans javascript. Nous utilisons le plugin jQuery.address pour fournir des fonctions de bouton avant et arrière aux fonctions AJAX. Le problème auquel je suis confronté est que ce plugin ne semble pas détecter si l'utilisateur a rafraîchi la page.Détecter l'actualisation du navigateur en Javascript

Ce code est exécuté chaque fois que l'utilisateur avance ou recule dans l'historique du navigateur. Je voudrais aussi l'exexiter lorsque l'utilisateur se rafraîchit.

$.address.init(function(event) { 
}).change(function(event) { 

     SummaryDiv.SwapPanels(newPanelID); 
    } 

Des idées?

Répondre

5

Une tentative naïve serait de simplement stocker l'état actuel dans un cookie après chaque changement et simplement les charger à nouveau sur chaque chargement de page.

+0

Voici comment je le ferais, sans chercher d'autres méthodes. Mais sachez que cette méthode pourrait être facilement évitée/éditée par l'utilisateur. –

+5

Tout comme l'ensemble du site par désactivé Javascript :) – LukeN

+0

Im essayant ceci. Cela semble être une solution de contournement commune. – Nick

1

Lors d'une actualisation de page, le javascript est également rechargé. Vous ne pouvez donc pas spécifier ce que vous voulez faire directement dans la méthode ready de jQuery?

1

j'ai pu forcer le code d'événement de changement pour exécuter le rafraîchissement par

window.onload = $.address.update(function(){  
... 
}) 
5

Le long de ces lignes, j'avais une page dont le comportement que je ne voulais pas répéter si rafraîchi, donc j'ai changé le hachage par programme comme décrit dans this answer.

checkRefresh: function() { 
    if (document.location.hash === '#visited') { 
     console.log('Refreshed'); 
     return true; 
    } else { 
     document.location.hash = 'visited'; 
     return false; 
    } 
} 

MISE À JOUR

Je trouve que au moins Safari Mobile ignorerait le hachage si le rafraîchissement automatique (par exemple, a eu lieu les données de page du cache avant expurgées être vu à nouveau). J'ai fini par utiliser une solution plus complexe described here.

Questions connexes