var iframe = document.getElementById('iframeId');var innerDoc =(iframe.contentDocument)? iframe.contentDocument : iframe.contentWindow.document;
Sie könnten einfacher schreiben:
var iframe = document.getElementById('iframeId');var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
und das erste gültige innere Dokument wird zurückgegeben.
Sobald Sie das innere Dokument erhalten haben, können Sie auf die Interna genauso zugreifen wie auf jedes Element auf Ihrer aktuellen Seite. ( innerDoc.getElementById... etc.)
WICHTIG: Stellen Sie sicher, dass sich der Iframe in derselben Domäne befindet, da Sie sonst keinen Zugriff auf seine Interna erhalten. Das wäre Cross-Site-Scripting.
Gute Antwort. Wussten Sie, dass Sie Folgendes tun können: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // besser lesbar und bedeutet dasselbe
David Snabel-Caunt
5
Ich habe Leute gesehen, die davon mehr verwirrt waren als ternäre Operatoren. Sie scheinen nicht zu wissen, dass der erste gültige zurückgegeben wird.
Geowa4
5
in der Tat, als ich die Antwort bearbeitete, um sie aufzunehmen, fragte mich der Typ über meiner Schulter, was das tat ...
geowa4
12
Wahrscheinlich besser zu erziehen, als der Einfachheit halber komplexeren Code zu verwenden :)
David Snabel-Caunt
1
@JellicleCat: Jeder Weg, um dies zu umgehen, ist eine Möglichkeit, "Cross-Site Request Forgery"
durchzuführen
12
Vergessen Sie nicht, nach dem Laden auf iframe zuzugreifen . Alter aber zuverlässiger Weg ohne jQuery:
Das ruft eine Funktion von einem iFrame auf und erhält keinen Verweis auf das Element.
Nick Mitchell
3
Die obigen Antworten ergaben gute Lösungen mit Javscript. Hier ist eine einfache jQuery-Lösung:
$('#iframeId').contents().find('div')
Der Trick dabei ist die .contents()Methode von jQuery , die im Gegensatz zu .children()nur HTML-Elementen .contents()sowohl Textknoten als auch HTML-Elemente abrufen kann. Deshalb kann man mit ihm Dokumentinhalte eines Iframes abrufen.
Lesen Sie weiter über jQuery .contents(): .contents ()
Beachten Sie, dass sich der Iframe und die Seite in derselben Domäne befinden müssen.
Wenn sich der Iframe nicht in derselben Domäne befindet, sodass Sie vom übergeordneten Element keinen Zugriff auf seine Interna erhalten, aber den Quellcode des Iframes ändern können, können Sie die vom Iframe angezeigte Seite ändern, um Nachrichten an das übergeordnete Fenster zu senden Sie können Informationen zwischen den Seiten teilen. Einige Quellen:
Vergessen Sie nicht, nach dem Laden auf iframe zuzugreifen . Alter aber zuverlässiger Weg ohne jQuery:
quelle
CallYourFunction()
ist die Funktion innerhalb der Seite und diese Funktionsaktion daraufquelle
Die obigen Antworten ergaben gute Lösungen mit Javscript. Hier ist eine einfache jQuery-Lösung:
Der Trick dabei ist die
.contents()
Methode von jQuery , die im Gegensatz zu.children()
nur HTML-Elementen.contents()
sowohl Textknoten als auch HTML-Elemente abrufen kann. Deshalb kann man mit ihm Dokumentinhalte eines Iframes abrufen.Lesen Sie weiter über jQuery
.contents()
: .contents ()Beachten Sie, dass sich der Iframe und die Seite in derselben Domäne befinden müssen.
quelle
Keine der anderen Antworten funktionierte für mich. Am Ende habe ich in meinem Iframe eine Funktion erstellt, die das gesuchte Objekt zurückgibt:
Dann rufen Sie diese Funktion folgendermaßen auf, um das Element abzurufen:
quelle
Wenn sich der Iframe nicht in derselben Domäne befindet, sodass Sie vom übergeordneten Element keinen Zugriff auf seine Interna erhalten, aber den Quellcode des Iframes ändern können, können Sie die vom Iframe angezeigte Seite ändern, um Nachrichten an das übergeordnete Fenster zu senden Sie können Informationen zwischen den Seiten teilen. Einige Quellen:
quelle
Der folgende Code hilft Ihnen dabei, die Iframe-Daten herauszufinden.
quelle