Подтвердить что ты не робот

Как получить содержание тела iframe в Javascript?

<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/>
4b9b3361

Ответ 1

Точный вопрос - как это сделать с использованием чистого JavaScript, а не с jQuery.

Я всегда использую решение, которое можно найти в исходном коде jQuery. Это только одна строка и чистый JavaScript.

Для меня это лучший и даже самый короткий способ получить содержимое 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.

И затем вы обычно можете использовать getElementById() или даже querySelectorAll(), чтобы выбрать DOM-элемент из iframeDocument:

var iframeContent;

if (iframeDocument) {
    iframeContent = iframeDocument.getElementById('frameBody');

    // or
    iframeContent = iframeDocument.querySelectorAll('#frameBody');
}

Функции вызова в iframe

Получить только элемент window из iframe, чтобы вызвать некоторые глобальные функции, переменные или целые библиотеки (например, jQuery):

var iframeWindow = iframe.contentWindow;

if (iframeWindow) {
    // 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.inside_iframe_variable = window.outside_iframe_variable;
}

Примечание

Все это возможно, если вы наблюдаете политику одного и того же происхождения.

Ответ 2

Используя JQuery, попробуйте следующее:

$("#id_description_iframe").contents().find("body").html()

Ответ 3

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);
 }

Ответ 4

он отлично работает для меня:

document.getElementById('iframe_id').contentWindow.document.body.innerHTML;

Ответ 5

используйте content в iframe с помощью JS:

document.getElementById('id_iframe').contentWindow.document.write('content');

Ответ 6

Я думаю, что размещение текста между тегами зарезервировано для браузеров, которые не могут обрабатывать iframe i.e...

<iframe src ="html_intro.asp" width="100%" height="300">
  <p>Your browser does not support iframes.</p>
</iframe>

Вы используете атрибут 'src' для установки источника iframes html...

Надеемся, что это поможет :)

Ответ 7

Следующий код совместим с кросс-браузером. Он работает в 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>

Ответ 8

Chalkey верен, вам нужно использовать атрибут src, чтобы указать страницу, содержащуюся в iframe. Если вы сделаете это, и документ в iframe находится в том же домене, что и родительский документ, вы можете использовать это:

var e = document.getElementById("id_description_iframe");
if(e != null) {
   alert(e.contentWindow.document.body.innerHTML);
}

Очевидно, что вы можете сделать что-то полезное с содержимым, а не просто помещать их в предупреждение.