214 votes

Comment faire pour vérifier si l'utilisateur peut revenir en arrière dans l'historique du navigateur ou pas

Je veux à l'aide de javascript pour voir si il y a l'histoire ou pas, je veux dire si le bouton de retour est disponible sur le navigateur ou pas.

Merci

158voto

McAden Points 7657

La seule façon précise serait la vérification de la propriété:

history.previous

Cependant, le problème avec ceci est que, dans la plupart des navigateurs, il est considéré comme une violation de la sécurité et généralement juste renvoie undefined.

history.length

C'est une propriété que d'autres ont suggéré...
Cependant, la longueur ne fonctionne pas complètement, car il n'a pas d'indiquer où, dans l'histoire que vous êtes. En outre, il n'est pas toujours commencer par le même nombre. C'est à dire, par exemple, commence à 0 alors que Google Chrome commence à 1 (à cause de la page de destination).

alt text

La plupart du temps un lien est ajouté que les appels:

history.back();

ou

 history.go(-1);

et il est juste prévu que, si vous ne pouvez pas revenir en arrière en cliquant sur le lien ne donne rien.

106voto

Ron Reiter Points 1436

Il y a une autre façon de le vérifier - vérifier le référent. La première page ont généralement un vide référent...

if (document.referrer == "") {
    window.close()
} else {
    history.back()
}

74voto

Ronald01990 Points 338

Même si c'est une vieille question, je pense que cela va aider les gens avec la même question dans l'avenir.

Mon code de laisser le navigateur revenir à la page, et si cela échoue, il charge d'un repli de l'url. Il a également détecter les hashtags de changements.

Lorsque le bouton de retour n'est pas disponible, le retour de l'url sera chargé après 500 ms, de sorte que le navigateur dispose d'assez de temps pour charger la page précédente. Chargement de secours url droite après l' window.history.go(-1); entraînerait le navigateur à utiliser la solution de repli url, parce que le script js ne pas s'arrêter là.

function historyBackWFallback(fallbackUrl) {
    fallbackUrl = fallbackUrl || '/';
    var prevPage = window.location.href;

    window.history.go(-1);

    setTimeout(function(){ if (window.location.href == prevPage) window.location.href = fallbackUrl; }, 500);
}

19voto

xtrahelp.com Points 527

ce qui semble faire l'affaire:

function goBackOrClose() {  

    window.history.back();
    window.close(); 

    //or if you are not interested in closing the window, do something else here
    //e.g. 
    theBrowserCantGoBack();

}

L'historique des appels.back() et ensuite de la fenêtre.close(). Si le navigateur est capable de revenir en arrière dans l'histoire, il ne sera pas en mesure d'obtenir à l'instruction suivante. Si ce n'est pas en mesure de revenir en arrière, il va fermer la fenêtre.

Cependant, veuillez noter que si la page a été atteint en tapant une url, puis firefox habitude de permettre le script pour fermer la fenêtre.

10voto

bobince Points 270740

Vous ne pouvez pas vérifier si le bouton de retour est utilisable. Vous pouvez regarder history.length>0, mais ce sera vrai si il y a des pages à l'avance de la page en cours. Vous ne pouvez être sûr que le bouton de retour est inutilisable lorsque history.length===0.

Si ce n'est pas assez bon, tout ce que vous pouvez faire est d'appeler history.back() et, si votre page est encore chargé par la suite, le bouton de retour n'est pas disponible! Bien sûr, cela signifie que si le bouton de retour est disponible, vous venez de naviguer loin de la page. Vous n'êtes pas autorisé à annuler la navigation en onunload, de sorte que tout ce que vous pouvez faire pour arrêter l'arrière qui se passe en réalité est pour revenir à quelque chose de onbeforeunload, ce qui entraînera une grande ennuyeux invite à apparaître. C'est pas la peine.

En fait, c'est normalement une très Mauvaise Idée de faire quelque chose avec l'histoire. L'histoire de la navigation pour le navigateur chrome, pas de pages web. L'ajout de "revenir en arrière" liens provoque généralement plus de confusion pour l'utilisateur que ce qu'il vaut.

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