einen IFRAME neu laden, ohne die Geschichte Hinzufügen
-
03-07-2019 - |
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?
nachladenLö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
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);