Ich möchte ein <iframe>
mit JavaScript neu laden . Der beste Weg, den ich bisher gefunden habe, war, das src
Attribut des Iframes auf sich selbst zu setzen, aber das ist nicht sehr sauber. Irgendwelche Ideen?
javascript
iframe
caffo
quelle
quelle
src
Attributs auf sich selbst nicht sauber ist? Es scheint die einzige Lösung zu sein, die über Browser und Domänen hinwegsrc
Attributs auf sich selbst verursacht Probleme, wenn Sie an anderer Stelle einen Link haben, der auf das Attribut abzielt<iframe>
. Dann zeigt der Rahmen die erste Seite wie ursprünglich entworfen.Antworten:
Seien Sie vorsichtig, in Firefox
window.frames[]
kann nicht nach ID, sondern nach Name oder Index indiziert werdenquelle
frames[1].location.href.reload()
undwindow.frames['some_frame_id'].location.href.reload()
kann auch verwendet werdenEs wird das
iframe
auch über Domains neu laden ! Getestet mit IE7 / 8, Firefox und Chrome.quelle
document.getElementById('iframeid').src += '';
funktioniert auch: jsfiddle.net/Daniel_Hug/dWm5kreload
aber das ist erlaubt.http://example.com/#something
), der Frame dadurch nicht neu geladen wird. Ich habe den Ansatz verwendet?v2
, der URL vor dem Hash einen Wegwerfabfrageparameter hinzuzufügen .Wenn Sie jQuery verwenden, scheint dies zu funktionieren:
Ich hoffe, es ist nicht zu hässlich für Stackoverflow.
quelle
var iframe = document.getElementById("your_iframe"); iframe.src = src;
var iframe = document.getElementById("your_iframe"); iframe.src = iframe.src;
Fügen Sie leeren Speicherplatz hinzu und laden Sie den iFrame automatisch neu.
quelle
quelle
Aufgrund derselben Ursprungsrichtlinie funktioniert dies nicht, wenn ein Iframe geändert wird, der auf eine andere Domäne verweist. Wenn Sie auf neuere Browser abzielen können, sollten Sie die dokumentübergreifende Nachrichtenübermittlung von HTML5 verwenden . Sie sehen die Browser, die diese Funktion unterstützen, hier: http://caniuse.com/#feat=x-doc-messaging .
Wenn Sie die HTML5-Funktionalität nicht verwenden können, können Sie die hier beschriebenen Tricks befolgen: http://softwareas.com/cross-domain-communication-with-iframes . Dieser Blogeintrag definiert das Problem auch gut.
quelle
Ich bin gerade auf Chrom gestoßen und das einzige, was funktioniert hat, war das Entfernen und Ersetzen des Iframes. Beispiel:
Ziemlich einfach, in den anderen Antworten nicht behandelt.
quelle
für neue URL
Die Methode assign () lädt ein neues Dokument.
neu laden
Die Methode reload () wird verwendet, um das aktuelle Dokument neu zu laden.
quelle
Das einfache Ersetzen des
src
Attributs des iframe-Elements war in meinem Fall nicht zufriedenstellend, da der alte Inhalt angezeigt wird, bis die neue Seite geladen wird. Dies funktioniert besser, wenn Sie sofort visuelles Feedback geben möchten:quelle
Eine Verfeinerung von Yajras Beitrag ... Ich mag den Gedanken, hasse aber die Idee der Browsererkennung.
Ich bin eher der Ansicht von ppk, die Objekterkennung anstelle der Browsererkennung zu verwenden ( http://www.quirksmode.org/js/support.html) ), weil Sie dann tatsächlich die Funktionen des Browsers testen und entsprechend handeln, anstatt Was Ihrer Meinung nach der Browser zu diesem Zeitpunkt kann. Erfordert auch nicht so viel hässliches Parsen von Browser-ID-Zeichenfolgen und schließt perfekt fähige Browser nicht aus, von denen Sie nichts wissen.
Also, anstatt auf navigator.AppName zu schauen, warum nicht so etwas tun und tatsächlich auf die Elemente testen, die Sie verwenden? (Sie könnten try {} -Blöcke verwenden, wenn Sie noch schicker werden möchten, aber das hat bei mir funktioniert.)
Auf diese Weise können Sie so viele verschiedene Permutationen ausprobieren, wie Sie möchten oder erforderlich sind, ohne Javascript-Fehler zu verursachen, und etwas Sinnvolles tun, wenn alles andere fehlschlägt. Es ist etwas mehr Arbeit, Ihre Objekte zu testen, bevor Sie sie verwenden, aber IMO sorgt für besseren und ausfallsichereren Code.
Arbeitete für mich in IE8, Firefox (15.0.1), Chrome (21.0.1180.89 m) und Opera (12.0.2) unter Windows.
Vielleicht könnte ich es noch besser machen, indem ich tatsächlich die Reload-Funktion teste, aber das reicht mir jetzt. :) :)
quelle
Versuchen Sie Folgendes, damit dies auf Chrome 66 funktioniert:
quelle
In IE8 mit .Net ist
iframe.src
das erstmalige Einstellen von in Ordnung , aberiframe.src
das zweite Einstellenpage_load
des wird die iframed-Seite nicht anheben . Um es zu lösen, habe ich verwendetiframe.contentDocument.location.href = "NewUrl.htm"
.Entdecken Sie es, wenn Sie jQuery thinBox verwenden und versuchen, dieselbe Seite im Thickbox-Iframe erneut zu öffnen. Dann wurde nur die frühere Seite angezeigt, die geöffnet wurde.
quelle
Verwenden Sie reload für IE und setzen Sie src für andere Browser. (Reload funktioniert nicht mit FF) getestet auf IE 7,8,9 und Firefox
quelle
Wenn Sie Jquery verwenden, gibt es einen Zeilencode.
und wenn Sie mit demselben Elternteil arbeiten, dann
quelle
Wenn all das bei Ihnen nicht funktioniert:
Dies hat aus irgendeinem Grund meinen Iframe anstelle des gesamten Skripts aktualisiert. Vielleicht, weil es im Frame selbst platziert ist, während all diese getElemntById-Lösungen funktionieren, wenn Sie versuchen, einen Frame aus einem anderen Frame zu aktualisieren?
Oder ich verstehe das nicht ganz und spreche Kauderwelsch, sowieso hat das bei mir wie ein Zauber funktioniert :)
quelle
Haben Sie darüber nachgedacht, einen bedeutungslosen Abfragezeichenfolgenparameter an die URL anzuhängen?
Es wird nicht angezeigt und wenn Sie wissen, dass der Parameter sicher ist, sollte es in Ordnung sein.
quelle
Eine andere Lösung.
quelle
var url = ifr.src; ifr.src = null; ifr.src = url;
Mit
self.location.reload()
wird der Iframe neu geladen.quelle
quelle
Wenn Sie alle anderen Vorschläge ausprobiert haben und keinen davon zum Laufen bringen konnten (wie ich es nicht konnte), können Sie Folgendes ausprobieren, das möglicherweise nützlich ist.
HTML
JS
Ich wollte zunächst versuchen, mit RWD- und Cross-Browser-Tests Zeit zu sparen. Ich wollte eine kurze Seite erstellen, die eine Reihe von Iframes enthielt, die in Gruppen organisiert waren, die ich nach Belieben ein- und ausblenden würde. Logischerweise möchten Sie in der Lage sein, einen bestimmten Frame einfach und schnell zu aktualisieren.
Ich sollte beachten, dass das Projekt, an dem ich gerade arbeite, das in diesem Prüfstand verwendet wird, eine einseitige Site mit indizierten Speicherorten ist (z. B. index.html # home). Das mag etwas damit zu tun haben, warum ich keine der anderen Lösungen zum Aktualisieren meines speziellen Rahmens bekommen konnte.
Trotzdem weiß ich, dass es nicht das sauberste auf der Welt ist, aber es funktioniert für meine Zwecke. Hoffe das hilft jemandem. Wenn ich nur herausfinden könnte, wie ich verhindern kann, dass der Iframe jedes Mal, wenn sich eine Animation im Iframe befindet, die übergeordnete Seite scrollt ...
BEARBEITEN: Mir wurde klar, dass dies den Iframe nicht so "auffrischt", wie ich es mir erhofft hatte. Es wird jedoch die ursprüngliche Quelle des Iframes neu geladen. Ich kann immer noch nicht herausfinden, warum ich keine der anderen Optionen zum Laufen bringen konnte.
UPDATE: Der Grund, warum ich keine der anderen Methoden zum Laufen bringen konnte, ist, dass ich sie in Chrome getestet habe und Sie in Chrome nicht auf den Inhalt eines Iframes zugreifen können (Erläuterung: Ist es wahrscheinlich, dass zukünftige Versionen von Chrome contentWindow unterstützen? / contentDocument, wenn iFrame eine lokale HTML-Datei aus einer lokalen HTML-Datei lädt? ), wenn sie nicht vom selben Speicherort stammt (soweit ich das verstehe). Bei weiteren Tests kann ich auch in FF nicht auf contentWindow zugreifen.
GEÄNDERT JS
quelle
Zum Debuggen könnte man die Konsole öffnen und den Ausführungskontext in den Frame ändern, den er aktualisieren und ausführen möchte
document.location.reload()
quelle