2009-06-11 13 views
11

¿Es posible verificar si hay un valor para history.go (-1)? Sé que no puedes acceder a history.previous directamente.Historial de página - ¿Existe el botón Atrás?

Estoy tratando de mantenerse alejado de document.referrer porque sé que puede ser bloqueado en algunos casos.

Aquí es lo que estoy tratando de hacer. Tengo una página de error, en esta página me gustaría tener un botón ATRÁS (si no es el único elemento en la historia) o un botón de cerrar (si lo está).

+0

duplicado posible de [Cómo comprobar si el usuario puede volver atrás en el historial del navegador o no] (http://stackoverflow.com/questions/3588315/how-to-check-if-the-user-can-go -back-in-browser-history-or-not) – bummi

Respuesta

18
if (history.length) { 
    //There is history to go back to 
    history.go(-1); 
}  
+0

¡Ja, duh! A veces es la respuesta más fácil. –

+3

¿Hay alguna forma de verificar si el botón de reenvío existe? – Mischa

+0

hace esta verificación si la página anterior fue 'sobre: ​​newtab' o no;) –

2

Si el historial tiene una longitud mayor que 0, entonces contiene al menos un punto de historial.

if (history.length) 
+0

sí, y ese punto de la historia podría ser 'about: newtab' también ¿no? –

10

En realidad, history.length es siempre uno o más, ya que el número de páginas actuales. Además, si tiene un historial de reenvío (es decir, si utilizó el botón Atrás), esas páginas también cuentan. Por lo que necesita una comprobación más complicado:

if((1 < history.length) && document.referrer) { 
+1

¿Hay alguna forma de verificar si el botón de reenvío existe? – Mischa

+1

El referente se pasa si se hace clic en el enlace 'target = '_ blank' 'y no se puede hacer' 'volver' 'en una nueva pestaña, por lo que esta solución no es perfecta. – Finesse

-1
function test() { 
     document.URL = document.referrer;    
    } 
2

no hay un enfoque multi-navegador para lograr esto. Document.Referrer puede establecerse incluso si no existe entrada de historial.

me ocurrió con el siguiente "piratear". Utiliza el evento onbeforeunload para detectar si el navegador comienza a salir de la página o no. Si no lo hace en un intervalo de tiempo determinado, se redireccionará a la reserva.

window.goBack = function goBack(fallback){ 
    var useFallback = true; 
    window.onbeforeunload = function(){ 
    useFallback = false; 
    } 
    window.history.back(); 

    setTimeout(function(){ 
    if (useFallback){ window.location.href = fallback; } 
    }, 100); 
} 

Puede llamar a esta función usando goBack("fallback.example.org").

Uno de los casos de uso es que puede querer agregar un botón Atrás a cualquier página y también quiere asegurarse de que este botón funcione incluso si el usuario va directamente a esta página (por ejemplo, mediante marcador, enlace directo, etc.)

Así que, o lo hace de realizar una history.back() o si no hay ninguna entrada, que va a redirigir a un repliegue.

Cuestiones relacionadas