Javascript Iframe innerHTML

Кто-нибудь знает, как получить HTML из IFRAME, я пробовал несколько разных способов:

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

и т.д.

Ответ 1

Я думаю, что это то, что вы хотите:

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

EDIT:

У меня есть хорошие полномочия, что это не будет работать в Chrome и Firefox, хотя оно отлично работает в IE, где я его тестировал. Оглядываясь назад, это была большая ошибка.

Это будет работать:

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

Я понимаю, что это не совсем то, что было задано, но не хочу удалять ответ, потому что я думаю, что у него есть место.

Мне нравится ответ jquery @ravz ниже.

Ответ 2

Будет работать что-то вроде следующего.

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

  }

Ответ 3

Если вы посмотрите JQuery, вы можете сделать что-то вроде:

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

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

Это предполагает, что ваш родитель и дочерний элемент iframe находятся на одном сервере из-за Same Origin Policy в Javascript.

Ответ 4

Ответ Конрой был прав. В случае, если вам нужны только теги тела, просто используйте:

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

Ответ 5

Не забывайте, что вы не можете перекрещивать домены из-за безопасности.

Итак, если это так, вы должны использовать JSON.

Ответ 6

С этой целью вы можете использовать свойство contentDocument или contentWindow. Вот пример кода.

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

здесь, мой кадр - это идентификатор вашего iframe. Примечание. Вы не можете извлечь содержимое из iframe из src вне домена.

Ответ 7

document.getElementById('iframe01').outerHTML

Ответ 8

Вы можете получить источник из другого домена, если вы установите фильтр ForceCORS в Firefox. Когда вы включите этот фильтр, он отключит функцию безопасности в браузере, и ваш script будет работать, даже если вы попытаетесь прочитать другую веб-страницу. Например, вы можете открыть FoxNews.com в iframe, а затем прочитать его источник. Причина, по которой современные веб-дизайнеры отрицают эту способность по умолчанию, состоит в том, что, если в другой домен включен фрагмент JavaScript, и вы читаете это и отображаете его на своей странице, он может содержать вредоносный код и представлять угрозу безопасности. Таким образом, всякий раз, когда вы показываете данные из другого домена на своей странице, вы должны остерегаться этой реальной угрозы и реализовать способ отфильтровать весь код JavaScript из вашего текста, прежде чем вы собираетесь его отображать. Помните, что если предполагаемый фрагмент исходного текста содержит некоторый код, заключенный в теги script, они не будут отображаться при отображении на вашей странице, тем не менее они будут работать! Итак, осознайте, что это угроза.

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

Ответ 9

Это решение работает так же, как iFrame. Я создал PHP-скрипт, который может получить все содержимое с другого веб-сайта, и наиболее важной частью является то, что вы можете легко применить свой пользовательский jQuery к этому внешнему контенту. Пожалуйста, обратитесь к следующему сценарию, который может получить все содержимое с другого сайта, а затем вы также можете применить свой cusom jQuery/JS. Этот контент может быть использован где угодно, внутри любого элемента или любой страницы.

<div id='myframe'>

  <?php 
   /* 
    Use below function to display final HTML inside this div
   */

   //Display Frame
   echo displayFrame(); 
  ?>

</div>

<?php

/* 
  Function to display frame from another domain 
*/

function displayFrame()
{
  $webUrl = 'http://[external-web-domain.com]/';

  //Get HTML from the URL
  $content = file_get_contents($webUrl);

  //Add custom JS to returned HTML content
  $customJS = "
  <script>

      /* Here I am writing a sample jQuery to hide the navigation menu
         You can write your own jQuery for this content
      */
    //Hide Navigation bar
    jQuery(\".navbar\").hide();

  </script>";

  //Append Custom JS with HTML
  $html = $content . $customJS;

  //Return customized HTML
  return $html;
}

Ответ 10

Вы можете получить html из iframe, используя этот код iframe = document.getElementById('frame'); innerHtml = iframe.contentDocument.documentElement.innerHTML