2009-05-14 21 views
9

Al probar document.location.href, he observado que cuando el usuario inicia una acción que da como resultado javascript que asigna a document.location.href, la nueva URL se agrega a la historia.Asignar a document.location.href sin historial de tropezones

Sin embargo, si la llamada es iniciada por javascript que es el resultado de, por ejemplo, cambio de estado de una solicitud XMLHTTP, la entrada de la página actual en el historial está sobrescrita. ¿He caracterizado esto correctamente? ¿Hay alguna manera de que el cambio de página se refleje en la historia en este último caso?

+0

No estoy muy seguro de lo que quiere hacer. ¿Desea eliminar los elementos de clic del historial o desea insertar los cambios de dirección sin clic en el historial? –

+0

Segundo: quiero que mi servidor pueda decirle al cliente que vaya a una página nueva, preservando el historial, como resultado de una respuesta a XMLHttpRequest – wolffiex

Respuesta

11

que estaba enfrentando el mismo problema y encontré esta solución, que trabajó para mí

en lugar de

function onAjaxCallback(evt){ 
    location.href=newLocation; 
} 

envolví la llamada location.href alrededor de un setTimeout. Parece funcionar. Mi historia se está comportando bien ahora. Espero que ayude

function onAjaxCallback(evt){ 
    setTimeout(function(){ 
     location.href=newLocation; 
    },0) 
} 
+3

por cierto probado en chrome, ff3.5 y ie8 – royston

+0

+1 esto resolvió mi problema en http://stackoverflow.com/questions/1629285/how-to-use-jquery-click-event-to-change-href-value-asyncronously-based-on-a-json – pavsaund

-1

Por desgracia, su pregunta no puede ser contestada, peticiones AJAX no tienen nada que ver con el historial del navegador, y si ha cargado un poco de contenido dinámico con ellos, entonces el usuario hace clic en el botón de retroceso del navegador, la página anterior se carga (este, que estaba cargado con un GET ordinario o solicitud POST), que corrompe la secuencia de mostrar contenido en.

respuestas de Dmitri significa que va a mantener su propia historia para el contenido dinámico utilizando la fragmento parte de la url (esto después del símbolo #), tal vez proporcione su propia espalda y fo botones hacia adelante, pero aún así no está protegido del efecto de los botones de navegación hacia atrás y hacia adelante.

Si solo hubieran proporcionado algún tipo de evento para manejar los clics del usuario en estos botones con la capacidad de cancelar.

1

Lea la pregunta original con más cuidado. La pregunta no es sobre el contenido cargado por un XHR, sino sobre el contenido cargado por un script cargado por un XHR. Tuve el mismo problema y el método setTimeout parece funcionar bien.

2

estudio: window.location.replace() y window.location.assign()

0

URL se puede añadir manualmente a la historia antes de redirigir al usuario.

if (window.history) { 
    history.pushState({}, window.location.href); 
} 
window.location.replace("/login/?next=" + window.location.pathname); 
Cuestiones relacionadas