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.
Réponses
Trop de publicités?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.
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.
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é.
Découvrez history.js. Il y a un html 5 statechange événement et vous pouvez l'écouter.
Avez-vous pris un coup d'oeil à cela? http://developer.yahoo.com/yui/history/