El navegador Back actúa sobre iframe anidado antes de la página en sí: ¿hay alguna forma de evitarla?

StackOverflow https://stackoverflow.com/questions/2245883

Pregunta

Tengo una página con datos dinámicos cargados por algunos AJAX y mucho JavaScript.

La página contiene una lista desde la cual el usuario puede elegir y cada valor seleccionado carga nuevos datos en la página.

Uno de estos elementos de datos es una URL proporcionada a un iframe.

yo suelo JQuery BBQ: Botón de retroceso y biblioteca de consultas Para simular el comportamiento del navegador.

Todo funciona bien además del hecho de que cuando hago clic en el botón Atrás por primera vez, el iframe vuelve a su ubicación anterior y luego necesito hacer clic nuevamente para que la página vuelva.

¿Hay alguna forma de deshabilitar el comportamiento de espalda del iframe?

¿Fue útil?

Solución

He encontrado la respuesta a mi problema, supongo que podría ser útil para otros.

El problema era con la forma en que asigné nuevas URL a mi iframe, usé jQuery para que pareciera algo así:

$('#myIFrame').attr('src',newUrl);

Al asignar la URL de esa manera, agrega una nueva entrada a la lista de URL visitadas del navegador a las que volver.
Ese no era el comportamiento deseado, por lo que después de buscar en Google descubrí que puede asignar una nueva URL a un objeto de iframe sin agregarlo a la 'lista de fondo', parece eso:

var frame = $('#myIFrame')[0];  
frame.contentWindow.location.replace(newUrl);

De esta manera, mi botón de espalda se comporta exactamente como se esperaba.

Por cierto, obtuve mi respuesta de aquí.

Espero que esto sea útil para ti como lo fue para mí.

Otros consejos

La respuesta aceptada no parece funcionar si intenta establecer una URL de dominio cruzado para el iframe. Como solución, separé el iframe del DOM antes de establecer el src (Usando jQuery).

// remove IFrame from DOM before setting source, 
// to prevent adding entries to browser history
var newUrl = 'http://www.example.com';
var iFrame = $('#myIFrame');
var iFrameParent = iFrame.parent();

iFrame.remove();
iFrame.attr('src', newUrl);
iFrameParent.append(iFrame);

Le sugiero que cree un hipervínculo dentro de su iframe. Llámalo 'de regreso' y ponga un href como JavaScript: History.back (-1) Eso es lo mejor que puedes hacer.

Básicamente, debe evitar la adición de nuevas entradas de historial en el iframe, Historia. Introducido en HTML5 funcionaría en la mayoría de los casos.

history.pushState(state, title, url);

No, esto depende completamente del navegador.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top