2008-09-26 15 views
17

Wer weiß, wie die HTML, um aus einem IFRAME ich verschiedene Weise versucht haben:Javascript Iframe innerHTML-

document.getElementById('iframe01').contentDocument.body.innerHTML 
document.frames['iframe01'].document.body.innerHTML 
document.getElementById('iframe01').contentWindow.document.body.innerHTML 

etc

+1

Für alle anderen, die hier aus einer Google-Suche, in Firefox zumindest versuchen, vielleicht auch 'theiFrameObject.contentDocument.body.innerHTML' landet. –

+1

@ MattBlaine Lösung funktioniert, aber der iframe src muss in der gleichen Domäne wie das Hauptfenster sein. Andernfalls muss der iframe sein Fenster an das Elternelement übergeben, wenn er 'parent.ifw = window' verwendet, und dann kann das übergeordnete Element' window.ifw.document' verwenden. –

Antwort

8

Wenn Sie einen Blick auf JQuery nehmen, können Sie etwas tun können, wie :

<iframe id="my_iframe" ...></iframe> 

$('#my_iframe').contents().find('html').html(); 

Dies wird vorausgesetzt, dass Ihre iframe Eltern und Kind auf demselben Server befinden, aufgrund der Same Origin Policy in Javascript.

+2

Sie greifen das innere HTML des HTML-Elements und nicht den Körper an. und das ist eine ziemlich rückständige Methode, es zu tun. Wenn es systemeigene DOM-Eigenschaften zum Abrufen von dem gibt, was Sie wollen (z. B. Körper), sollten Sie den Overhead eines Suchaufrufs vermeiden. – Prestaul

+0

+1 das funktioniert in allen gängigen Browsern – ravi404

+13

Stoppen Sie mit einer jQuery als Antwort bitte! –

13

Ich denke, das ist das, was Sie wollen:

window.frames['iframe01'].document.body.innerHTML 

EDIT:

ich es auf gute Autorität haben, dass dies nicht in Chrome und Firefox funktioniert, obwohl es perfekt in IE funktioniert, wo ich es getestet habe. Im Nachhinein war das ein großer Fehler

Dies funktioniert:

window.frames[0].document.body.innerHTML 

Ich verstehe, dass dies nicht genau das, was gefragt wurde, will aber nicht, um die Antwort zu löschen, weil ich denke, es hat einen Platz .

Ich mag @ ravz die jquery Antwort unten.

+1

Und wenn Sie eindeutiger sein möchten, könnten Sie sagen: window.frames ['iframe01']. Document.body.innerHTML – Prestaul

+0

Ich stimme zu. Danke – wcm

+2

Es funktioniert nicht in Chrome. :( – Kane

3

Vergessen Sie nicht, dass Sie Domänen aus Sicherheitsgründen nicht überqueren können.

Wenn dies der Fall ist, sollten Sie JSON verwenden.

10

Etwas wie das Folgende würde funktionieren.

<iframe id = "testframe" onload = populateIframe(this.id);></iframe> 

// The following function should be inside a script tag 

function populateIframe(id) { 

    var text = "This is a Test" 
var iframe = document.getElementById(id); 

var doc; 

if(iframe.contentDocument) { 
    doc = iframe.contentDocument; 
} else { 
    doc = iframe.contentWindow.document; 
} 

doc.body.innerHTML = text; 

    } 
+0

Brilliant !!! Du bist der !! beste –

2

Sie können die contentDocument- oder contentWindow-Eigenschaft für diesen Zweck verwenden. Hier ist der Beispielcode.

function gethtml() 
{ 
var x=document.getElementById("myframe"); 
var y=(x.contentWindow || x.contentDocument); 
if (y.document)y=y.document; 
alert(y.body.innerHTML); 
} 

Hier ist mein Rahmen die ID Ihres iframe. Hinweis: Sie können den Inhalt nicht aus einem iframe aus einer Quelle außerhalb Ihrer Domäne extrahieren.

6

Conroys Antwort war richtig. Im Fall, dass Sie nur Sachen von Body-Tag, verwenden Sie einfach:

$('#my_iframe').contents().find('body').html(); 
+0

Beste Antwort Dank nicht vergessen:

2
document.getElementById('iframe01').outerHTML 
1

Sie können die Quelle von einer anderen Domäne, wenn Sie den ForceCORS Filter auf Firefox installieren. Wenn Sie diesen Filter aktivieren, wird die Sicherheitsfunktion im Browser umgangen, und Ihr Skript funktioniert auch dann, wenn Sie versuchen, eine andere Webseite zu lesen. Zum Beispiel könnten Sie FoxNews.com in einem iframe öffnen und dann seine Quelle lesen. Der Grund, warum moderne Webbrwoser diese Fähigkeit standardmäßig ablehnen, liegt darin, dass, wenn die andere Domäne ein Stück JavaScript enthält und Sie es lesen und auf Ihrer Seite anzeigen, es bösartigen Code enthalten und eine Sicherheitsbedrohung darstellen kann. Wenn Sie also Daten aus einer anderen Domäne auf Ihrer Seite anzeigen, müssen Sie sich vor dieser echten Bedrohung in Acht nehmen und eine Möglichkeit implementieren, den gesamten JavaScript-Code aus Ihrem Text herauszufiltern, bevor Sie ihn anzeigen.Denken Sie daran, wenn ein angeblicher Rohtext einen Code enthält, der in Script-Tags enthalten ist, werden sie nicht angezeigt, wenn Sie ihn auf Ihrer Seite anzeigen, trotzdem werden sie ausgeführt! Also, erkennen Sie, dass dies eine Bedrohung ist.

http://www-jo.se/f.pfleger/forcecors