2010-02-11 4 views
20

Tengo una página con datos dinámicos cargados por algunos ajax y muchos javascript.El navegador funciona de nuevo en un iframe anidado antes de la página en sí; ¿hay alguna forma de evitarlo?

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

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

Uso jQuery BBQ: Back Button & Query Library para simular el comportamiento del navegador.

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

¿Hay alguna manera de desactivar el comportamiento de la espalda del iframe?

+0

Estoy interesado en la respuesta a esto; Mi comprensión (posiblemente incorrecta) es que la página tiene poco o ningún control sobre lo que hace el navegador con el botón "Atrás". O el botón "adelante" para ese asunto. – Pointy

Respuesta

44

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

El problema era con la forma en que asignaron nuevas direcciones URL a mi Iframe, yo solía Jquery por lo que parecía algo así:

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

Al asignar la dirección URL de esa manera se añade una nueva entrada en el navegador de lista de URL visitadas para volver a.
que no fue el comportamiento deseado, así que después de algunas google he encontrado que se puede asignar una nueva dirección URL a un objeto iframe sin agregarlo a la 'lista de vuelta', parece que:

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

De esta forma, mi botón de retroceso se comportará exactamente como se esperaba.

por cierto, recibí mi respuesta de here.

Espero que esto haya sido útil para usted, ya que fue para mí.

+0

Gracias, este era el problema exacto que estaba teniendo. Realmente ayudado. – dev

+3

Esto solo funciona para iframe con el mismo dominio que el sitio web en el que está incrustado. No funcionará para iframes entre dominios. – tjmehta

+0

¿Cómo puedo usar este código cuando envío el formulario con target = "myIFrame" para señalar iframe? – ShivarajRH

-2

No, esto depende completamente del navegador.

0

Sugiero que cree un hipervínculo dentro de su iframe. llámalo 'Atrás' y pon un href como javascript: history.back (-1) Creo que es lo mejor que puedes hacer.

0

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

history.pushState(state, title, url); 
+0

Dentro del iframe? ¿Cómo le digo al iframe que haga eso si 'src =" http: /google.com "' por ejemplo? – trusktr

1

La respuesta aceptada no parece funcionar si se intenta establecer un enlace entre dominios para el IFrame. Como solución alternativa, extraje el IFrame del DOM antes de configurar 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); 
Cuestiones relacionadas