Nun, ich habe einen IFrame, der dieselbe Domain-Seite aufruft. Mein Problem ist, dass ich über diese aufgerufene Seite (über JavaScript) auf einige Informationen von diesem übergeordneten Iframe zugreifen möchte. Wie kann ich auf diesen Iframe zugreifen?
Details: Es gibt mehrere Iframes wie diesen, auf denen dieselbe Seite geladen werden kann, da ich eine Windows-Umgebung programmiere. Ich habe vor, diesen Iframe zu schließen, deshalb muss ich wissen, welchen ich aus seinem Inneren schließen soll. Ich habe ein Array, das Verweise auf diese Iframes enthält.
EDIT: Dort werden iframes dynamisch generiert
javascript
iframe
José Leal
quelle
quelle
Antworten:
Sie können auch Name und ID auf gleiche Werte setzen
So können Sie den nächsten Code auf der untergeordneten Seite verwenden
quelle
iframe
zu kleinen druckt . Aber warum funktioniert es?window.name
gibt eine Zeichenfolge zurück. Was ist anders daran,window.name
als nur den ID-Namen als Zeichenfolge zu übergeben, was nicht funktioniert.)?Rufen
window.frameElement
Sie einfach von Ihrer gerahmten Seite an. Wenn sich die Seite nicht in einem Frame befindet,frameElement
wird dies der Fall seinnull
.Der andere Weg (das Fensterelement in einen Rahmen zu bekommen ist weniger trivial), aber der Vollständigkeit halber:
quelle
window.frameElement
null
Gibt zurück, wenn Fenster und Iframe unterschiedliche Domänen haben, dh Cross-Origin-Messaging.Ich würde empfehlen, die postMessage-API zu verwenden .
Rufen Sie in Ihrem Iframe an:
Auf der Seite, auf der Sie den Iframe einfügen, können Sie auf Ereignisse wie dieses warten:
Übrigens ist es auch möglich, andere Fenster und nicht nur Iframes aufzurufen.
Lesen Sie mehr über die API auf John postmessage Resigs Blog hier
quelle
<iframe>
Inhalt muss nichts über die Eltern wissen und umgekehrt. Sie müssen nur den einfachen Nachrichtenvertrag einhalten. Genial!'*'
.'*'
auf Clients. Alle anderen Lösungen geben einen Fehler in einem Chrome-Browser aus, der Dateien im Client-Ordner als nicht gleich Origin behandelt, da kein Server eingerichtet ist. Dies ist die beste und einzige Lösung: dyn-web.com/tutorials/iframes/postmessageAlte Frage, aber ich hatte gerade das gleiche Problem und fand einen Weg, um den Iframe zu bekommen. Es geht einfach darum, das Frames [] -Array des übergeordneten Fensters zu durchlaufen und das contentWindow jedes Frames anhand des Fensters zu testen, in dem Ihr Code ausgeführt wird. Beispiel:
Oder mit jQuery:
Diese Methode spart das Zuweisen einer ID zu jedem Iframe, was in Ihrem Fall gut ist, da sie dynamisch erstellt werden. Ich konnte keinen direkteren Weg finden, da Sie das iframe-Element nicht mit window.parent abrufen können - es geht direkt zum übergeordneten Fensterelement (Überspringen des iframe). Das Durchlaufen scheint also der einzige Weg zu sein, es sei denn, Sie möchten IDs verwenden.
quelle
Sie können verwenden,
parent
um auf die übergeordnete Seite zuzugreifen. Um auf eine Funktion zuzugreifen, wäre dies:quelle
Sobald die ID des Iframes festgelegt ist, können Sie wie unten gezeigt vom inneren Dokument aus auf den Iframe zugreifen.
Funktioniert gut in IE, Chrome und FF.
quelle
var iframe = frameElement
Vielleicht einfach benutzen
in Ihren Iframe, um den aufrufenden Frame / die aufrufenden Fenster zu erhalten. Wenn Sie mehrere Anrufrahmen hatten, können Sie verwenden
quelle
Versuchen Sie Folgendes: Richten Sie in Ihrem übergeordneten Frame IFRAMEs wie folgt ein:
Beachten Sie, dass die ID jedes Frames als Anker im src übergeben wird.
Dann können Sie in Ihrem inneren HTML-Code über location.hash auf die ID des Frames zugreifen, in den es geladen wurde:
Anschließend können Sie auf parent.document.getElementById () zugreifen, um aus dem iframe heraus auf das iframe-Tag zuzugreifen
quelle
quelle