<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>
Я хочу отримати:
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>
Я хочу отримати:
test<br/>
Відповіді:
Точне запитання - як це зробити з чистим JavaScript, а не з jQuery.
Але я завжди використовую рішення, яке можна знайти у вихідному коді jQuery. Це лише один рядок рідного JavaScript.
Для мене це найкращий, легкий для читання і навіть afaik найкоротший спосіб отримати вміст iframes.
Спочатку дістаньте свій кадр iframe
var iframe = document.getElementById('id_description_iframe');
// or
var iframe = document.querySelector('#id_description_iframe');
А потім скористайтеся рішенням jQuery
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
Він працює навіть в Internet Explorer, який робить цю хитрість під час
contentWindow
власностіiframe
об'єкта. Більшість інших веб-переглядачів використовуєcontentDocument
властивість, і саме тому ми спочатку доводимо цю властивість у цьому АБО умові. Якщо це не встановлено, спробуйтеcontentWindow.document
.
Виберіть елементи в iframe
Тоді зазвичай ви можете використовувати getElementById()
або навіть querySelectorAll()
вибрати DOM-елемент з iframeDocument
:
if (!iframeDocument) {
throw "iframe couldn't be found in DOM.";
}
var iframeContent = iframeDocument.getElementById('frameBody');
// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
Функції виклику в iframe
Отримайте просто window
елемент iframe
для виклику деяких глобальних функцій, змінних або цілих бібліотек (наприклад 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 /*, ... */);
Примітка
Все це можливо, якщо ви дотримуєтесь політики одного походження .
document.querySelector('#id_description_iframe').onload = function() {...
Надію, що це комусь допоможе.
Спробуйте JQuery:
$("#id_description_iframe").contents().find("body").html()
це прекрасно працює для мене:
document.getElementById('iframe_id').contentWindow.document.body.innerHTML;
.body
це не працює. Однак .getElementsByTagName('body')[0]
робить.
AFAIK, Iframe не може бути використаний таким чином. Потрібно вказати його атрибут src на іншу сторінку.
Ось як отримати його вміст тіла за допомогою старого JavaScript на площині. Це працює як з IE, так і з 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);
}
Я думаю, що розміщення тексту між тегами зарезервовано для браузерів, які не можуть обробляти iframe, тобто.
<iframe src ="html_intro.asp" width="100%" height="300">
<p>Your browser does not support iframes.</p>
</iframe>
Ви використовуєте атрибут 'src' для встановлення джерела htram iframes ...
Сподіваюся, що це допомагає :)
Наступний код сумісний із переглядачем. Він працює в IE7, IE8, Fx 3, Safari та Chrome, тому не потрібно обробляти проблеми між веб-браузерами. Не тестували в 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
для мене не визначено. (Ubuntu 13.04, Chrome)
Chalkey правильний, вам потрібно використовувати атрибут src, щоб вказати сторінку, яка міститиметься в iframe. Якщо ви це зробите, і документ у iframe знаходиться в тому самому домені, що і батьківський документ, ви можете використовувати це:
var e = document.getElementById("id_description_iframe");
if(e != null) {
alert(e.contentWindow.document.body.innerHTML);
}
Очевидно, ви можете потім зробити щось корисне зі вмістом, а не просто надсилати їм попередження.
Щоб отримати вміст тіла з JavaScript, я спробував такий код:
var frameObj = document.getElementById('id_description_iframe');
var frameContent = frameObj.contentWindow.document.body.innerHTML;
де "id_description_iframe" - ідентифікатор вашого iframe. Цей код добре працює для мене.