<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
Was ich bekommen möchte ist:
test<br/>
<iframe id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
<html>
<head></head>
<body class="frameBody">
test<br/>
</body>
</html>
</iframe>
Was ich bekommen möchte ist:
test<br/>
Antworten:
Die genaue Frage ist, wie es mit reinem JavaScript geht, nicht mit jQuery.
Aber ich verwende immer die Lösung, die im Quellcode von jQuery zu finden ist. Es ist nur eine Zeile natives JavaScript.
Für mich ist es das beste, leicht lesbar und sogar afaik der kürzeste Weg , um die iframes Inhalt zu erhalten.
Holen Sie sich zuerst Ihren Iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
Verwenden Sie dann die Lösung von jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Es funktioniert sogar im Internet Explorer, der diesen Trick während der
contentWindow
Eigenschaft desiframe
Objekts ausführt. Die meisten anderen Browser verwenden diecontentDocument
Eigenschaft. Aus diesem Grund prüfen wir diese Eigenschaft zuerst in dieser ODER-Bedingung. Wenn es nicht eingestellt ist, versuchen Sie escontentWindow.document
.
Wählen Sie Elemente im Iframe aus
Dann können Sie normalerweise das DOM-Element verwenden getElementById()
oder sogar querySelectorAll()
auswählen aus iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Rufen Sie Funktionen im Iframe auf
Holen Sie sich nur das window
Element von iframe
, um einige globale Funktionen, Variablen oder ganze Bibliotheken aufzurufen (z. B. jQuery
):
var iframeWindow = iframe.contentWindow;
// you can even call jQuery or other frameworks
// if it is loaded inside the iframe
iframeContent = iframeWindow.jQuery('#frameBody');
// or
iframeContent = iframeWindow.$('#frameBody');
// or even use any other global variable
iframeWindow.myVar = window.myVar;
// or call a global function
var myVar = iframeWindow.myFunction(param1 /*, ... */);
Hinweis
All dies ist möglich, wenn Sie die Richtlinie mit demselben Ursprung einhalten .
document.querySelector('#id_description_iframe').onload = function() {...
Hope einbinden, es hilft jemandem.
Versuchen Sie Folgendes mit JQuery:
$("#id_description_iframe").contents().find("body").html()
es funktioniert perfekt für mich:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
funktioniert es nicht. Tut es .getElementsByTagName('body')[0]
jedoch.
AFAIK, ein Iframe kann so nicht verwendet werden. Sie müssen das src-Attribut auf eine andere Seite verweisen.
Hier erfahren Sie, wie Sie den Körperinhalt mit altem Javascript ermitteln. Dies funktioniert sowohl mit IE als auch mit Firefox.
function getFrameContents(){
var iFrame = document.getElementById('id_description_iframe');
var iFrameBody;
if ( iFrame.contentDocument )
{ // FF
iFrameBody = iFrame.contentDocument.getElementsByTagName('body')[0];
}
else if ( iFrame.contentWindow )
{ // IE
iFrameBody = iFrame.contentWindow.document.getElementsByTagName('body')[0];
}
alert(iFrameBody.innerHTML);
}
Ich denke, das Platzieren von Text zwischen den Tags ist Browsern vorbehalten, die keine Iframes verarbeiten können, z.
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Sie verwenden das Attribut 'src', um die Quelle des iframes-HTML-Codes festzulegen ...
Hoffe das hilft :)
Der folgende Code ist browserübergreifend kompatibel. Es funktioniert in IE7, IE8, Fx 3, Safari und Chrome, sodass keine browserübergreifenden Probleme behandelt werden müssen. Nicht in IE6 getestet.
<iframe id="iframeId" name="iframeId">...</iframe>
<script type="text/javascript">
var iframeDoc;
if (window.frames && window.frames.iframeId &&
(iframeDoc = window.frames.iframeId.document)) {
var iframeBody = iframeDoc.body;
var ifromContent = iframeBody.innerHTML;
}
</script>
window.frames.iframeId.document
ist für mich undefiniert. (Ubuntu 13.04, Chrome)
Chalkey ist korrekt. Sie müssen das src-Attribut verwenden, um die Seite anzugeben, die im iframe enthalten sein soll. Wenn Sie dies tun und sich das Dokument im Iframe in derselben Domäne wie das übergeordnete Dokument befindet, können Sie Folgendes verwenden:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Natürlich können Sie dann mit den Inhalten etwas Nützliches tun, anstatt sie nur in eine Warnung zu versetzen.
Um Körperinhalte aus Javascript zu erhalten, habe ich den folgenden Code ausprobiert:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
Dabei ist "id_description_iframe" die ID Ihres Iframes. Dieser Code funktioniert gut für mich.