it-swarm.com.de

DOM-Inhalt von domänenübergreifendem Iframe abrufen

Ich habe einen Iframe für eine domänenübergreifende Site. Ich möchte das DOM des Iframes lesen, was ich für möglich hielt, da ich mit dem Inspector sogar das DOM eines Iframes ändern kann. Bei jedem Versuch, es zu lesen, stoße ich jedoch auf dieselbe Origin-Richtlinie. Alles, was ich möchte, ist der Inhalt, der vom iframe in mein lokales DOM geladen wird. Ich dachte, es wäre so einfach wie $(document.body).find('iframe').html(), aber das gibt den leeren String zurück.

Ich hoffe wirklich, dass es einen Weg gibt, dies zu tun, da die Arbeit, die ich in den letzten Tagen geleistet habe, davon abhängt, dass dies machbar ist.

Vielen Dank

68
D-Nice

Das kannst du nicht. XSS-Schutz . Cross-Site-Inhalte können nicht mit Javascript gelesen werden. Kein großer Browser wird Ihnen das erlauben. Es tut mir leid, aber dies ist ein Designfehler. Sie sollten die Idee fallen lassen.

[~ # ~] edit [~ # ~]

Beachten Sie, dass Sie, wenn Sie über Bearbeitungszugriff auf die im iframe geladene Website verfügen, postMessage verwenden können (siehe auch Browserkompatibilität ).

68

Es gibt einen einfachen Weg.

  1. Sie erstellen einen iframe, der für die Quelle so etwas wie " http://Ihre-Domain.com/Index.php?url=http://the-site-you-want-to-get.com/Unicorn" enthält

  2. Dann rufen Sie diese URL einfach mit $ _GET ab und zeigen den Inhalt mit file_get_contents an ($ _ GET ['url']);

Sie erhalten einen Iframe mit einer Domain, die mit Ihrer Domain identisch ist. Anschließend können Sie den Inhalt mithilfe von $ ("Iframe"). Contents (). Find ("body") manipulieren.

14

Wenn Sie Zugriff auf die iframed-Seite haben, können Sie beispielsweise easyXDM verwenden, um Funktionsaufrufe im iframe durchzuführen und die Daten zurückzugeben.

Wenn Sie keinen Zugriff auf die iframed-Seite haben, müssen Sie eine serverseitige Lösung verwenden. Mit PHP könntest du etwas schnelles und schmutziges machen wie:

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 
8
devmatt

Wenn Sie Zugriff auf die geladene Domäne/den geladenen Iframe haben, können Sie window.postMessage verwenden, um zwischen Iframe und dem Hauptfenster zu kommunizieren.

Lesen Sie das DOM mit JavaScript in iframe und senden Sie es per postMessage an das obere Fenster.

Weitere Informationen finden Sie hier: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

4
Maksim Luzik