Der Browser reagiert auf verschachtelte Iframes vor der Seite selbst – gibt es eine Möglichkeit, dies zu vermeiden?

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

Frage

Ich habe eine Seite mit dynamischen Daten, die von Ajax und viel Javascript geladen werden.

Die Seite enthält eine Liste, aus der der Benutzer auswählen kann, und jeder ausgewählte Wert lädt neue Daten auf die Seite.

Eines dieser Datenelemente ist eine URL, die einem Iframe bereitgestellt wird.

ich benutze jQuery BBQ:Zurück-Schaltfläche und Abfragebibliothek um das Browser-Zurück-Verhalten zu simulieren.

Alles funktioniert gut, bis auf die Tatsache, dass, wenn ich zum ersten Mal auf die Schaltfläche „Zurück“ klicke, der Iframe an seine vorherige Position zurückkehrt und ich dann erneut auf „Zurück“ klicken muss, damit die Seite zurückgeht.

Gibt es eine Möglichkeit, das Zurückverhalten des Iframes zu deaktivieren?

War es hilfreich?

Lösung

Ich habe die Antwort auf mein Problem gefunden. Vermutlich könnte es für andere nützlich sein.

Das Problem war mit der Art und Weise, wie ich meinem Iframe neue URLs zugewiesen habe. Ich habe JQuery verwendet, also sah es so aus:

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

Wenn Sie die URL auf diese Weise zuweisen, fügt sie der Liste der besuchten URLs des Browsers einen neuen Eintrag hinzu.
Das war nicht das gewünschte Verhalten. Nach einigem Googeln stellte ich fest, dass Sie einem Iframe-Objekt eine neue URL zuweisen können, ohne sie der "Back-Liste" hinzuzufügen, so sieht es so aus:

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

Auf diese Weise verhalten sich mein Rückenknopf genau wie erwartet.

Übrigens habe ich meine Antwort von hier.

Ich hoffe, das war für Sie hilfreich wie für mich.

Andere Tipps

Die akzeptierte Antwort scheint nicht zu funktionieren, wenn Sie versuchen, eine Cross-Domänen-URL für den Iframe festzulegen. Als Problemumgehung habe ich das Iframe vom DOM abgelöst, bevor ich die festgelegt habe src (mit 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);

Ich schlage vor, dass Sie einen Hyperlink in Ihrem Iframe erstellen.Nennen Sie es „Zurück“ und fügen Sie eine href als javascript:history.back(-1) ein. Das ist meiner Meinung nach das Beste, was Sie tun können.

Grundsätzlich müssen Sie die Hinzufügung neuer Verlaufseinträge im Iframe verhindern. Geschichte.Replacestate In HTML5 eingeführt würde in den meisten Fällen funktionieren.

history.pushState(state, title, url);

Nein, das liegt ganz dem Browser.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top