56 votes

Est-il un moyen de rattraper le bouton de retour de l'événement dans le javascript?

Est-il un moyen de répondre à la touche retour d'être frappé (ou retour arrière pressé) en javascript lorsque seul le hachage de l'emplacement des changements? C'est-à-dire lorsque le navigateur est de ne pas communiquer avec le serveur ou le rechargement de la page.

30voto

insin Points 19509

Je pense que vous aurez juste à utiliser setInterval d'interroger l'état d' window.location.hash régulièrement.

var hash = location.hash;

setInterval(function()
{
    if (location.hash != hash)
    {
        alert("Changed from " + hash + " to " + location.hash);
        hash = location.hash;
    }
}, 100);

Il n'est pas instantanée, mais il se sent assez sensible pour moi.

12voto

Brooke Points 46

J'ai créé une solution qui peut être utile à certaines personnes. Il suffit d'inclure le code sur votre page, et vous pouvez écrire votre propre fonction qui sera appelée lorsque le bouton de retour est cliqué.

J'ai testé sous IE, FF, Chrome et Safari, et sont tous de travail. La solution que j'ai des travaux basés sur des iframes sans la nécessité constante d'interrogation, dans IE et FF, cependant, en raison des limitations dans d'autres navigateurs, l'emplacement de hachage est utilisée dans Safari.

7voto

Tom Penzer Points 71

J'ai fait un plaisir de hack pour résoudre ce problème à ma satisfaction. J'ai un site en AJAX qui charge le contenu de manière dynamique, puis modifie la fenêtre.emplacement.de hachage, et j'ai eu le code à exécuter lors de l' $(document).prêt() pour analyser la valeur de hachage et de charger la section appropriée. Le truc c'est que j'étais parfaitement heureux avec ma section chargement de code pour la navigation, mais je voulais ajouter un moyen d'intercepter le navigateur boutons précédent et suivant, la fenêtre modifier l'emplacement, mais pas interférer avec ma page en cours de chargement routines où je manipule la fenêtre.l'emplacement, et l'interrogation sur la fenêtre.lieu à des intervalles constants, il était hors de question.

Ce que j'ai fait était de créer un objet en tant que tel:

var pageload = {
    ignorehashchange: false,
    loadUrl: function(){
        if (pageload.ignorehashchange == false){
            //code to parse window.location.hash and load content
        };
    }
};

Ensuite, j'ai ajouté une ligne sur mon site un script pour exécuter l' pageload.loadUrl de la fonction sur la hashchange événement, comme tel:

window.addEventListener("hashchange", pageload.loadUrl, false);

Ensuite, toutes les fois que je veux modifier l' window.location.hash sans le déclenchement de cette page de chargement de routine, j'ai tout simplement ajouter la ligne suivante avant chaque window.location.hash = ligne:

pageload.ignorehashchange = true;

et puis la ligne suivante après chaque hachage modification de la ligne:

setTimeout(function(){pageload.ignorehashchange = false;}, 100);

Alors maintenant, ma section de chargement routines sont généralement en cours d'exécution, mais si l'utilisateur appuie sur le "retour" ou "en avant" des boutons, le nouvel emplacement est analysé et la section appropriée chargé.

3voto

JulianW Points 381

Découvrez history.js. Il y a un html 5 statechange événement et vous pouvez l'écouter.

1voto

powtac Points 18619

Avez-vous pris un coup d'oeil à cela? http://developer.yahoo.com/yui/history/

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