<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>
Chcę uzyskać:
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>
Chcę uzyskać:
test<br/>
Odpowiedzi:
Dokładne pytanie brzmi: jak to zrobić za pomocą czystego JavaScript, a nie jQuery.
Ale zawsze korzystam z rozwiązania, które można znaleźć w kodzie źródłowym jQuery. To tylko jedna linia natywnego JavaScript.
Dla mnie jest to najlepszy, łatwo czytelne i nawet AFAIK najkrótsza droga do uzyskania zawartości iframe.
Najpierw zdobądź swój iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
A następnie użyj rozwiązania jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Działa nawet w przeglądarce Internet Explorer, która robi tę sztuczkę podczas
contentWindow
własnościiframe
obiektu. Większość innych przeglądarek korzysta z tejcontentDocument
właściwości i jest to powód, dla którego najpierw sprawdzamy tę właściwość w tym warunku LUB. Jeśli nie jest ustawione, spróbujcontentWindow.document
.
Wybierz elementy w elemencie iframe
Następnie możesz zwykle użyć getElementById()
lub nawet querySelectorAll()
wybrać element DOM z iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Funkcje wywołań w ramce iframe
Pobierz tylko window
element from, iframe
aby wywołać niektóre funkcje globalne, zmienne lub całe biblioteki (np. 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 /*, ... */);
Uwaga
Wszystko to jest możliwe, jeśli przestrzegasz zasady tego samego pochodzenia .
document.querySelector('#id_description_iframe').onload = function() {...
Hope to pomaga komuś.
Używając JQuery, spróbuj tego:
$("#id_description_iframe").contents().find("body").html()
u mnie działa idealnie:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
nie działa. Jednak .getElementsByTagName('body')[0]
tak.
AFAIK, iframe nie może być używane w ten sposób. Musisz wskazać jego atrybut src na inną stronę.
Oto jak uzyskać zawartość treści za pomocą starego javascript. Działa to zarówno z IE, jak i 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);
}
Myślę, że umieszczanie tekstu między tagami jest zarezerwowane dla przeglądarek, które nie obsługują ramek iframe, tj.
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Używasz atrybutu „src”, aby ustawić źródło elementów iframe html ...
Mam nadzieję, że to pomoże :)
Poniższy kod jest zgodny z różnymi przeglądarkami. Działa w IE7, IE8, Fx 3, Safari i Chrome, więc nie ma potrzeby rozwiązywania problemów z różnymi przeglądarkami. Nie testowałem w IE6.
<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
jest dla mnie nieokreślona. (Ubuntu 13.04, Chrome)
Chalkey jest poprawny, musisz użyć atrybutu src, aby określić stronę, która ma być zawarta w ramce iframe. Jeśli to zrobisz, a dokument w ramce iframe znajduje się w tej samej domenie co dokument nadrzędny, możesz użyć tego:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Oczywiście możesz wtedy zrobić coś pożytecznego z zawartością, zamiast po prostu umieszczać ją w ostrzeżeniu.
Aby pobrać treść z javascript, wypróbowałem następujący kod:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
gdzie „id_description_iframe” to identyfikator elementu iframe. Ten kod działa dobrze dla mnie.