Angenommen, ich habe keine Kontrolle über den Inhalt im Iframe. Gibt es eine Möglichkeit, eine src-Änderung darin über die übergeordnete Seite zu erkennen? Eine Art Onload vielleicht?
Mein letzter Ausweg ist ein 1-Sekunden-Intervalltest, wenn der iframe src derselbe ist wie zuvor, aber diese hackige Lösung wäre scheiße.
Ich verwende die jQuery-Bibliothek, wenn es hilft.
javascript
jquery
iframe
onload
Matrym
quelle
quelle
src
Eigenschaft ändern, wenn auf einen Link im Iframe geklickt wird? Da bin ich mir nicht sicher - wenn ich raten müsste, würde ich "nein" sagen. Es gibt Möglichkeiten, Eigenschaften zu überwachen (zumindest in Firefox AFAIK), aber ich bin mir nicht sicher, ob dies in diesem Fall von Nutzen sein wird.src
Attribut im DOM in den neuesten Versionen von FireFox oder Safari nicht ändert. @ Michiels Antwort unten ist so gut, wie ich es bisher geschafft habe.Antworten:
Möglicherweise möchten Sie das
onLoad
Ereignis wie im folgenden Beispiel verwenden:Die Warnung wird angezeigt, wenn sich der Speicherort innerhalb des Iframes ändert. Es funktioniert in allen modernen Browsern, aber möglicherweise nicht in einigen sehr älteren Browsern wie IE5 und Early Opera. ( Quelle )
Wenn der Iframe eine Seite in derselben Domäne des übergeordneten Elements anzeigt , können Sie
contentWindow.location
wie im folgenden Beispiel auf den Speicherort zugreifen :quelle
this.contentWindow.location.href
bekomme,Permission denied to access property 'href'
this.contentWindow.location
ist für andere Domänen verfügbar. Auchthis.contentWindow.location.href
ist für andere Domains verfügbar, aber nur zum Schreiben. Das Lesenthis.contentWindow.location.href
ist jedoch auf dieselbe Domäne beschränkt.Antwort basierend auf JQuery <3
Wie von subharb erwähnt, muss dies ab JQuery 3.0 geändert werden in:
https://jquery.com/upgrade-guide/3.0/#breaking-change-load-unload-and-error-removed
quelle
if (counter > 1) { // do something on iframe actual change }
(vorausgesetzt, der Zähler wurde zu Beginn auf 0 gesetzt)Wenn Sie keine Kontrolle über die Seite haben und auf Änderungen achten möchten, verwenden Sie die moderne Methode
MutationObserver
Ein Beispiel für seine Verwendung, bei dem
src
darauf geachtet wird, dass sich das Attribut eines ändertiframe
Ausgabe nach 3 Sekunden
Auf jsFiddle
Die hier gepostete Antwort als ursprüngliche Frage wurde als Duplikat dieser Frage geschlossen.
quelle
observe
. Dies ist nur ein Beispiel.Hinweis: Das Snippet funktioniert nur, wenn der Iframe denselben Ursprung hat.
Andere Antworten schlugen das
load
Ereignis vor, aber es wird ausgelöst, nachdem die neue Seite im Iframe geladen wurde. Möglicherweise müssen Sie sofort benachrichtigt werden, nachdem sich die URL geändert hat , nicht nachdem die neue Seite geladen wurde.Hier ist eine einfache JavaScript-Lösung:
Dadurch werden die
src
Attributänderungen sowie alle URL-Änderungen, die im iframe selbst vorgenommen wurden, erfolgreich verfolgt.In allen modernen Browsern getestet.
Ich habe auch mit diesem Code einen Kern gemacht . Sie können auch meine andere Antwort überprüfen . Es wird etwas ausführlicher darauf eingegangen, wie dies funktioniert.
quelle
Der Iframe behält immer die übergeordnete Seite bei. Sie sollten dies verwenden, um festzustellen, auf welcher Seite Sie sich im Iframe befinden:
HTML Quelltext:
Js:
quelle
Seit Version 3.0 von Jquery wird möglicherweise eine Fehlermeldung angezeigt
Was leicht zu beheben ist
quelle
Hier ist die Methode, die in Commerce SagePay- und Commerce Paypoint Drupal-Modulen verwendet wird und die im Grunde genommen
document.location.href
mit dem alten Wert verglichen wird, indem zuerst ein eigener, dann ein externer Iframe geladen wird .Grundsätzlich besteht die Idee darin, die leere Seite als Platzhalter mit eigenem JS-Code und verstecktem Formular zu laden. Der übergeordnete JS-Code sendet dann das versteckte Formular, in dem es
#action
auf den externen Iframe verweist. Sobald die Umleitung / Übermittlung erfolgt ist, kann der JS-Code, der noch auf dieser Seite ausgeführt wird, Ihredocument.location.href
Wertänderungen verfolgen .Hier ist das in iframe verwendete Beispiel-JS:
Und hier ist JS, das auf der übergeordneten Seite verwendet wird:
Dann müssen Sie in eine temporäre leere Zielseite das Formular einfügen, das zur externen Seite umleitet.
quelle