browser back actúa sobre el iframe anidado antes de la propia página - ¿ hay alguna manera de evitarlo?


Tengo una página con datos dinámicos cargados por algunos ajax y un montón de javascript.

La página contiene una lista de la que el usuario puede elegir y cada valor seleccionado carga nuevos datos a la página.

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

Utilizo jQuery BBQ: Back Button & Query Library para simular el comportamiento de retroceso 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 va volver a su ubicación anterior y luego necesito hacer clic de nuevo para hacer que la página vuelva.

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

Author: Mithun Sreedharan, 2010-02-11

5 answers

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

El problema fue con la forma en que asigné nuevas URL a mi Iframe, usé Jquery para que se viera 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 para regresar.
Ese no era el comportamiento deseado, así que después de buscar en Google descubrí que puede asignar una nueva URL a un objeto Iframe sin agregarlo al 'back-list', se ve así:

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

De esta manera mi botón trasero se comporta exactamente como se esperaba.

Por cierto, recibí mi respuesta de aquí.

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

 47
Author: kfiroo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-13 11:24:26

La respuesta aceptada no parece funcionar si intenta establecer una URL entre dominios para el IFrame. Como solución alternativa, separé el IFrame del DOM antes de configurar 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);
 2
Author: Georg Patscheider,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-24 08:52:40

Le sugiero que cree un hipervínculo dentro de su iframe. llámelo 'Back' y ponga un href como javascript:history.volver (-1) Eso es lo mejor que puedes hacer, creo.

 1
Author: Mateen Kadwaikar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-27 11:57:31

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

history.pushState(state, title, url);
 -1
Author: Igor G.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-12 10:12:29

No, esto depende completamente del navegador.

 -2
Author: jumpin 88,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-13 10:17:22