Je souhaite utiliser la fonction window.history.pushState()
dans la prise en charge des navigateurs. Malheureusement, je reçois une erreur sur Firefox:
TypeError: history.pushState n'est pas une fonction
Comment est-il possible d'éviter cela?
La balise [try-catch] implique ce que vous connaissez déjà la réponse ... (y a-t-il quelque chose de plus spécifique?) L'autre possibilité consiste à vérifier if ( history.pushState ) history.pushState( {}, document.title, location.href );
Bien que je ne l'aie pas testé en JavaScript, je sais que, dans d'autres langues, try-catch nécessite davantage de ressources qu'un simple ...
Utilisation:
if(history.pushState) {
history.pushState({"id":100}, document.title, location.href);
}
Gardez à l'esprit que lorsque vous cliquez sur le bouton Précédent, rien ne se produit réellement à moins que vous n'implémentiez window.onpopstate
. Vous devrez transmettre les données dont vous avez besoin pour récupérer le contenu:
if(history.pushState && history.replaceState) {
//Push current id, title and url
history.pushState({"id":100}, document.title, location.href);
//Push new information
history.pushState({"id":101}, "new title", "/new-url/");
//this executes when you use the back button
window.onpopstate = function(e) {
alert(e.state.id);
//perhaps use an ajax call to update content based on the e.state.id
};
}
Un module d'interface existe pour l'API d'historique. Le History.js utilise l’événement hashchange de HTML4 avec des identifiants de fragment de document pour imiter l’API d’historique des navigateurs plus anciens. Si l'une des URL de hachage est utilisée par un navigateur moderne, il utilise replaceState pour corriger silencieusement l'URL.
Si cela ne vous dérange pas que cela ne fonctionne pas dans les anciens navigateurs et que vous voulez simplement l'utiliser sans générer d'erreur, je le fais ...
window.history && window.history.pushState && window.history.pushState("", "", url);
Ceci vérifie que l'historique et la fonction pushstate existent avant d'essayer de les utiliser.