21

有谁知道如何从 IFRAME 中获取 HTML 我尝试了几种不同的方法:

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

ETC

4

10 回答 10

20

我认为这就是你想要的:

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

编辑:

我有充分的权威表明这在 Chrome 和 Firefox 中不起作用,尽管它在 IE 中完美运行,这是我测试它的地方。回想起来,这是一个很大的错误

这将起作用:

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

我知道这不是所要求的,但我不想删除答案,因为我认为它有一个位置。

我喜欢下面@ravz 的 jquery 答案。

于 2008-09-26T12:35:00.430 回答
12

Having something like the following would work.

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

  }
于 2010-08-18T08:32:17.967 回答
9

如果您查看JQuery,您可以执行以下操作:

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

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

由于Javascript 中的同源策略,这是假设您的 iframe 父级和子级位于同一服务器上。

于 2008-09-26T12:32:18.533 回答
5

康罗伊的回答是对的。如果您只需要 body 标签中的内容,只需使用:

$('#my_iframe').contents().find('body').html();
于 2012-12-12T15:58:05.520 回答
2

不要忘记,由于安全性,您不能跨域。

因此,如果是这种情况,您应该使用JSON

于 2008-09-26T12:38:20.330 回答
2

您可以为此目的使用 contentDocument 或 contentWindow 属性。这是示例代码。

function gethtml() {
  const x = document.getElementById("myframe")
  const y = x.contentWindow || x.contentDocument
  const z = y.document ? y.document : y
  alert(z.body.innerHTML)
}

这里,myframe是你的 iframe 的 id。注意:您不能从域外的 src 中提取 iframe 中的内容。

于 2011-09-02T21:11:39.940 回答
1

如果您在 Firefox 上安装 ForceCORS 过滤器,则可以从其他域获取源。当您打开此过滤器时,它会绕过浏览器中的安全功能,即使您尝试阅读其他网页,您的脚本也能正常工作。例如,您可以在 iframe 中打开 FoxNews.com,然后阅读其源代码。现代网络浏览器默认拒绝此功能的原因是,如果另一个域包含一段 JavaScript,而您正在阅读它并将其显示在您的页面上,则它可能包含恶意代码并构成安全威胁。因此,每当您在页面上显示来自另一个域的数据时,您必须提防这种真正的威胁,并实施一种方法来过滤掉您的文本中的所有 JavaScript 代码,然后再显示它。记住,当一段假定的原始文本包含一些包含在脚本标签中的代码时,当您在页面上显示它时它们不会显示出来,但它们会运行!所以,意识到这是一个威胁。

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

于 2015-02-16T02:32:44.830 回答
1
document.getElementById('iframe01').outerHTML
于 2014-06-19T11:30:51.357 回答
1

此解决方案与 iFrame 相同。我创建了一个 PHP 脚本,可以从其他网站获取所有内容,最重要的是您可以轻松地将自定义 jQuery 应用于该外部内容。请参考以下脚本,该脚本可以从其他网站获取所有内容,然后您也可以应用您的自定义 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;
}
于 2019-01-15T10:59:55.133 回答
-1

您可以使用以下代码从 iframe 中获取 html iframe = document.getElementById('frame'); innerHtml = iframe.contentDocument.documentElement.innerHTML

于 2018-05-29T04:50:02.143 回答