Ich möchte den HTML-Code in einem Iframe mit jQuery bearbeiten.
Ich dachte, ich könnte dies tun, indem ich den Kontext der jQuery-Funktion als Dokument des Iframes einstelle, etwa:
$(function(){ //document ready
$('some selector', frames['nameOfMyIframe'].document).doStuff()
});
Dies scheint jedoch nicht zu funktionieren. Ein bisschen Inspektion zeigt mir, dass die Variablen in frames['nameOfMyIframe']
sind, es undefined
sei denn, ich warte eine Weile, bis der Iframe geladen ist. Wenn der Iframe geladen wird, ist jedoch nicht auf die Variablen zugegriffen (ich erhalte permission denied
Fehler vom Typ Typ).
Kennt jemand eine Problemumgehung?
.contentWindow.document
als.document
für dasiframe
Element. Ich werde die Änderung oben vorschlagen.Antworten:
Ich denke, was Sie tun, unterliegt der gleichen Herkunftsrichtlinie . Dies sollte der Grund sein, warum Sie Fehler erhalten , denen die Berechtigung verweigert wurde .
quelle
Wenn das
<iframe>
aus derselben Domäne stammt, sind die Elemente als leicht zugänglichReferenz
quelle
same origin policy
ist. In diesem Fall ist diese Antwort keine Lösung für ihn.Sie können die
.contents()
Methode von jQuery verwenden.quelle
Wenn der iframe src von einer anderen Domain stammt, können Sie dies trotzdem tun. Sie müssen die externe Seite in PHP einlesen und von Ihrer Domain aus wiedergeben. So was:
iframe_page.php
Dann so etwas:
display_page.html
Das obige Beispiel zeigt, wie eine externe Seite über einen Iframe bearbeitet wird, ohne dass der Zugriff verweigert wird.
quelle
same origin policy
existiert, und der Vorschlag dieser Antwort ist nicht immun dagegen.Ich finde diesen Weg sauberer:
quelle
Verwenden
anstatt
quelle
Sie müssen ein Ereignis an den Onload-Handler eines Iframes anhängen und dort das js ausführen, damit Sie sicherstellen können, dass der Iframe vollständig geladen wurde, bevor Sie darauf zugreifen.
Das oben genannte Problem löst das Problem "noch nicht geladen". Wenn Sie jedoch eine Seite in den Iframe laden, die aus einer anderen Domäne stammt, können Sie aufgrund von Sicherheitsbeschränkungen nicht darauf zugreifen.
quelle
Mit window.postMessage können Sie eine Funktion zwischen page und seinem iframe aufrufen (domänenübergreifend oder nicht).
Dokumentation
page.html
iframe.html
quelle
Ich bevorzuge die Verwendung einer anderen Variante für den Zugriff. Vom Elternteil aus können Sie auf eine Variable im untergeordneten Iframe zugreifen.
$
ist auch eine Variable und Sie können Zugriff auf ihren gerechten Aufruf erhaltenwindow.iframe_id.$
Beispiel:
window.view.$('div').hide()
- Alle Divs im Iframe mit der ID 'view' ausblenden.Aber es funktioniert nicht in FF. Für eine bessere Kompatibilität sollten Sie verwenden
$('#iframe_id')[0].contentWindow.$
quelle
Haben Sie den Klassiker ausprobiert und darauf gewartet, dass der Ladevorgang mit der integrierten Bereitschaftsfunktion von jQuery abgeschlossen ist?
K.
quelle
Ich erstelle einen Beispielcode. Jetzt können Sie leicht von verschiedenen Domains aus verstehen, dass Sie nicht auf Inhalte von iframe zugreifen können. Dieselbe Domain, auf die wir zugreifen können
Ich teile Ihnen meinen Code. Bitte führen Sie diesen Code aus. Überprüfen Sie die Konsole. Ich drucke Bild src an der Konsole. Es gibt vier Iframes, zwei Iframes, die von derselben Domain stammen, und zwei weitere von anderen Domains (Drittanbieter). Sie können zwei Bild-src sehen ( https://www.google.com/logos/doodles/2015/googles-new-logo) -5078286822539264.3-hp2x.gif
und
https://www.google.com/logos/doodles/2015/arbor-day-2015-brazil-5154560611975168-hp2x.gif ) an der Konsole und kann auch zwei Berechtigungsfehler (2 Fehler: Berechtigung für den Zugriff auf das Eigenschaftendokument verweigert) anzeigen '
... irstChild)}, Inhalt: Funktion (a) {return m.nodeName (a, "iframe")? a.contentDocument ...
), der von einem Drittanbieter stammt.
quelle
Ich bin hier gelandet, um den Inhalt eines Iframes ohne Abfrage zu erhalten. Für alle anderen, die danach suchen, ist es genau das:
quelle
Diese Lösung funktioniert genauso wie iFrame. Ich habe ein PHP-Skript erstellt, mit dem alle Inhalte von der anderen Website abgerufen werden können. Der wichtigste Teil ist, dass Sie Ihre benutzerdefinierte jQuery problemlos auf diese externen Inhalte anwenden können. Weitere Informationen finden Sie im folgenden Skript, mit dem Sie alle Inhalte von der anderen Website abrufen können. Anschließend können Sie auch Ihr cusom jQuery / JS anwenden. Dieser Inhalt kann überall, in jedem Element oder auf jeder Seite verwendet werden.
quelle
Für noch mehr Robustheit:
und
quelle