2012-06-14 13 views
6

Estoy notando un comportamiento extraño con Internet Explorer cuando mi página está dentro de un iframe. Parece que el iframe se vuelve a cargar al llamar a window.history.back(), aunque solo debe cambiar el hash de la URL. Cuando la página no está dentro de un iframe, se comporta correctamente y no vuelve a cargar la página. ¿Alguna idea de por qué está sucediendo esto y cómo prevenirlo?window.history.back() vuelve a cargar la página en Internet Explorer cuando está dentro de un iframe?

creé un violín que demostrará esto en IE9:

http://jsfiddle.net/peh96/5/

jsFiddle utiliza un iframe, por lo que el comportamiento será el comportamiento de marco flotante. Al hacer clic en '#foo' y '#bar' se cambiará el hash en la URL. Ahora, al hacer clic en el enlace 'ATRÁS' se activará window.history.back(). Tenga en cuenta que la marca de tiempo cambia cuando lo hace, lo que indica que la página se está recargando.

Alternativamente, si se carga el iframe directamente:

http://fiddle.jshell.net/peh96/5/show/

se dará cuenta de que la marca de tiempo no cambia cuando se haga clic en 'BACK'.

Esto es solo un problema de IE, ya que Chrome y Firefox son consistentes ya sea dentro de un iframe o no.

¿Alguna idea de cómo evitar esta recarga?

+0

También estamos muy molestado por este error :( – Blackbird

+0

@Blackbird, ¿cuál es la solución que ha elegido para resolver este problema? –

+0

ninguno, por desgracia :(¿Y usted? – Blackbird

Respuesta

2

Bueno, cuando elijo Atrás comando desde el menú contextual, hace lo mismo. En IE10 puede usar HTML5 State Management. Me temo que en IE9 se debe realizar un seguimiento de la historia de hash y que el cambio de esta manera:

document.getElementById('back').addEventListener('click', function() { 
    window.location.hash = 'abc'; 
}, false); 

Editar

Y qué pasa con esto? Cuando llama al javascript:window.top.location.hash='bar', puede capturar el evento onhashchange en la ventana principal y luego llamar al scrollTo en iframe. Pero esto funciona solo en el mismo dominio.

+0

Gracias Václav. Pero creo Eva que agrega otro estado en la pila de historia, ¿es correcto? Entonces, si bien funcionará, rompe los estados de atrás/adelante. –

+0

Eso es verdad. Trataré de encontrar otra solución. –

+0

Estoy un poco confundido, pero parece que http://jsfiddle.net/peh96/5/ muestra el ejemplo en el modo peculiar que puede aprovechar el historial del navegador ignora # enlaces. Cuando abro http://fiddle.jshell.net/peh96/5/show/, funciona como se esperaba. Por supuesto, debe actualizar la hora cuando ocurre 'onhashchange'. Comprueba mi código: http://jsfiddle.net/ZGqHF/show/ –

Cuestiones relacionadas