il browser si comporta di nuovo in iframe nidificato prima che la pagina stessa - c'è un modo per evitarlo?

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

Domanda

Ho una pagina con i dati dinamici caricati da alcuni ajax e un sacco di javascript.

la pagina contiene un elenco da cui l'utente può scegliere e ogni carichi di valore selezionati i nuovi dati alla pagina.

Uno di questi elementi è un URL dati forniti a un iframe.

jQuery barbecue: Back Button & Query Biblioteca per simulare il su browser comportamenti indietro.

Tutto funziona bene oltre al fatto che quando scatto il tasto back per la prima volta l'iframe ritorna alla sua posizione precedente e quindi ho bisogno di fare clic di nuovo per rendere la pagina tornare indietro.

C'è un modo per disattivare il comportamento schiena del iframe?

È stato utile?

Soluzione

Ho trovato la risposta al mio problema indovinare che potrebbe essere utile per gli altri là fuori.

Il problema era con il modo in cui i nuovi URL assegnato al mio Iframe, ho usato Jquery così sembrava qualcosa di simile:

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

Quando si assegna l'URL in quel modo aggiunge una nuova voce alla lista di URL visitati per tornare al browser.
Quello non era il comportamento desiderato, quindi dopo un po 'googling ho trovato che è possibile assegnare un nuovo URL ad un oggetto Iframe senza aggiungere al 'back-list', sembra che:

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

In questo modo il mio tasto posteriore si comportano esattamente come previsto.

A proposito, ho avuto la mia risposta da qui .

Spero che questo è stato utile a voi come lo era per me.

Altri suggerimenti

La risposta accettata non sembra funzionare, se si tenta di impostare un URL tra domini per l'IFrame. Per aggirare il problema, ho staccato l'IFrame dal DOM prima di impostare il 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);

Vi suggerisco di creare un collegamento ipertestuale all'interno del tuo iframe. chiamare 'Indietro' e mettere un href come javascript:. history.back (-1) Questo è il meglio che puoi fare Penso

In sostanza è necessario per evitare che l'aggiunta di nuovi elementi della cronologia in iframe, history.replaceState introdotte in HTML5 dovrebbe funzionare nella maggior parte dei casi.

history.pushState(state, title, url);

No, questo è del tutto fino al browser.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top