Frage

Ich bin ein IFRAME des src zu ändern, um es neu zu laden, seine adaequat und das Brennen des onload Ereignisses, wenn seine HTML Lasten.

Aber es fügt einen Eintrag in die Geschichte, die ich nicht will. Gibt es eine Möglichkeit, um eine IFRAME und noch keinen Einfluss auf die Geschichte?

nachladen
War es hilfreich?

Lösung

Sie können Javascript verwenden location.replace :

window.location.replace('...html');
  

Ersetzen Sie das aktuelle Dokument mit der   eine an der URL bereitgestellt. Das   Differenz von der assign () Methode   dass nach der Verwendung replace () die aktuelle   Seite wird nicht in Session gespeichert werden   Geschichte, wird der Benutzer bedeutet nicht   der Lage, die Zurück-Taste zu verwenden, um   navigieren zu.

Andere Tipps

ersetzt Verwendung von () ist nur eine Option, mit Ihrer eigenen Domain iframes. Es scheitert an entfernten Standorten zu arbeiten. (ZB: eine Twitter-Taste) und erfordert einige browserspezifische Kenntnisse, um zuverlässig das Kind Fenster zugreifen

Stattdessen entfernen Sie einfach das iframe-Element und einen neuen an der gleichen Stelle konstruieren. History Elemente werden nur dann erstellt, wenn Sie das src Attribut ändern, nachdem es in dem DOM ist, so stellen Sie sicher, dass es vor dem Anfügen zu setzen.

Edit: JDandChips erwähnt zu Recht, dass Sie von DOM entfernen können, Modifiy und Wieder append. Constructing frisch ist nicht erforderlich.

Wie Greg oben gesagt, die .replace () Funktion ist, wie dies zu tun. Ich kann nicht scheinen, um herauszufinden, wie man seine Antwort * zu antworten, aber der Trick ist, die iFrames contentWindow Eigenschaft zu verweisen.

var ifr = document.getElementById("iframeId");
ifr.contentWindow.location.replace("newLocation.html"); 

* Nur habe ich gelernt, mehr Ansehen müssen auf eine Antwort kommentieren.

Eine alternative Methode, um den iframe neu zu erstellen wäre, die iframe aus dem DOM zu entfernen, die src ändern und dann wieder hinzufügen.

In vielerlei Hinsicht ist dies ähnlich den replace() Vorschlag, aber ich hatte einige Probleme, wenn ich diesen Ansatz versucht, mit history.js und Verwaltung von Staaten manuell.

var container = iframe.parent();

iframe.remove();
iframe.attr('src', 'about:blank');

container.append(iframe);

Eine Lösung ist den object Tag eher als der iframe Tag zu verwenden.

Ersetzen folgt aus:

<iframe src="http://yourpage"/>

Durch diese:

<object type="text/html" data="http://yourpage"/>

können Sie das data Attribut aktualisieren, ohne die Geschichte zu beeinflussen. Dies ist nützlich, wenn Sie einen deklarativen Rahmen verwenden wie React.js wo Sie sollen nicht zwingenden Befehl tun, um den DOM zu aktualisieren.

Weitere Informationen über die Unterschiede zwischen iframe und object: Die Verwendung von Iframe oder Object-Tag Webseiten in einer anderen

einzubetten

Versuchen Sie, diese Funktion nutzen alte iframe mit neuen iframe zu ersetzen, die vom alten kopiert:

function setIFrameSrc(idFrame, url) {
    var originalFrame = document.getElementById(idFrame);
    var newFrame = document.createElement("iframe");
    newFrame.id = originalFrame.getAttribute("id");
    newFrame.width = originalFrame.getAttribute("width");
    newFrame.height = originalFrame.getAttribute("height");
    newFrame.src = url;    
    var parent = originalFrame.parentNode;
    parent.replaceChild(newFrame, originalFrame);
}

Verwenden Sie es wie folgt aus:

setIFrameSrc("idframe", "test.html");

Auf diese Weise wird nicht URL des iframe-Browser Geschichte hinzuzufügen.

die replace Methode Verwenden Sie die Zugabe des iframe der URL Geschichte zu umgehen:

HTML:

<iframe id="myIframe" width="100%" height="400" src="#"></iframe>

JavaScript:

var ifr = document.getElementById('mIframe')
if (ifr) {
  ifr.contentWindow.location.replace('http://www.blabla.com')
}

Die einfachste und schnelle Lade Lösung
Verwenden Sie window.location.replace nicht die Geschichte zu aktualisieren, wenn die Seite oder den Rahmen geladen werden.

Für Links sieht es wie folgt aus:

<a href="#" onclick="YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>

oder

<a href="javascript:YourTarget.location.replace ('http://www.YourPage.com');">
The targeted Link</a>



Aber , wenn Sie wollen, dass es nicht von Link zu handeln, sondern automatisch zu handeln, wenn der Rahmen dann aus dem iframe Laden sollten Sie dies in dem iframe-Datei Körperabschnitt setzen:

onload="window.location.replace ('http://www.YourPage.com');"


Wenn aus irgendeinem Grund die onload dann nicht in der iframe laden setzen Sie Ihr Ziel-Frame-Namen anstelle des Fensters in der Syntax wie folgt aus:

onload="YourTarget.location.replace ('http://www.YourPage.com');"



Hinweis:. Für dieses Skript alle onclick, onmouseover, onmouseout, onload und href="javascript:" funktioniert

JDandChips Antwort für mich am Kreuz Herkunft iframe (youtube) gearbeitet, hier ist es in Vanille JS (ohne JQuery):

const container = iframe.parentElement;

container.removeChild(iframe);

iframe.setAttribute('src', 'about:blank');

container.appendChild(iframe);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top