如何在Javascript中获取iframe的主体内容?

如何在Javascript中获取iframe的主体内容?,javascript,html,iframe,Javascript,Html,Iframe,我想得到的是: <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 id="id_description_iframe" class="rte-zone" height="200" frameborder="0" title="description">
  <html>
    <head></head>
    <body class="frameBody">
      test<br/>
    </body>
  </html>
</iframe>

我认为在标签之间放置文本是为不能处理iFrame的浏览器保留的,例如

test<br/>
您可以使用'src'属性设置iframes html的源


希望有帮助:

Chackey是正确的,您需要使用src属性来指定要包含在iframe中的页面。如果执行此操作,并且iframe中的文档与父文档位于同一域中,则可以使用以下方法:

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

显然,您可以对内容做一些有用的事情,而不仅仅是将它们放在警报中。

好的,Iframe不能这样使用。您需要将其src属性指向另一个页面

下面是如何使用老javascript获取其主体内容。这适用于IE和Firefox

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

使用JQuery,尝试以下操作:

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

以下代码是跨浏览器兼容的。它适用于IE7、IE8、FX3、Safari和Chrome,因此无需处理跨浏览器问题。没有在IE6中测试

$("#id_description_iframe").contents().find("body").html()
将iframe中的内容与JS一起使用:

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

它非常适合我:

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

确切的问题是如何使用纯JavaScript而不是jQuery来实现

但我总是使用jQuery源代码中的解决方案。 这只是一行本地JavaScript

对我来说,这是获取iframes内容的最好、易读甚至最短的方法

首先得到你的iframe

然后使用jQuery的解决方案

它甚至可以在InternetExplorer中工作,InternetExplorer在iframe对象的contentWindow属性期间执行此操作。大多数其他浏览器使用contentDocument属性,这就是为什么我们首先在这个OR条件中证明这个属性的原因。如果未设置,请尝试contentWindow.document

在iframe中选择元素

然后,通常可以使用getElementById甚至querySelectorAll从iframeDocument中选择DOM元素:

在iframe中调用函数

仅从iframe获取窗口元素,以调用一些全局函数、变量或整个库,例如jQuery:


如果您观察。

要从javascript获取正文内容,我尝试了以下代码:

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 /*, ... */);
其中id\u description\u iframe是您的iframe的id。
此代码对我来说运行良好。

您可以在一行代码中获得iframe主体的内容:

var frameObj = document.getElementById('id_description_iframe');

var frameContent = frameObj.contentWindow.document.body.innerHTML;

下面的html在Mac上的Chrome7中对我有效。我用Chrome6在Windows上测试了这篇原创文章,效果很好。。。var iframeDoc;如果window.frames&&window.frames.iframeId&&window.frames.iframeId.document{window.frames.iframeId.document.body.innerHTML=testing;}window.frames.iframeId.document对我来说是未定义的。Ubuntu13.04,Chromeit在safari ie branchhaving cross domain问题上的做法,阻止了一个具有源代码的帧访问一个跨源代码的帧。它不起作用,因为域、协议和端口必须匹配。:不安全的JavaScript试图访问具有URL的帧如前所述,如果域匹配,它就会起作用。仅供参考,我刚刚发现,\u iframe\u body.html的$id\u description\u iframe id\u可以在Chrome中使用,但不能在所有firefox版本中使用,因此使用上面的代码是可以的。也就是说,$id_description_iframe id_of_iframe_body.contents.findbody.html在这两种情况下都起作用了框架在这里是未定义的,或者您应该编写完整的代码,或者不应该使用它编写jQuery请原谅,但是代码行是jQuery代码的摘录,代码块是我自己的示例代码。其余的人都应该出去。唯一缺少的是变量iframe。我不可能知道你的iframe在哪里,或者它的ID是怎样的。你能在答案的顶部添加一个警告吗?如果iframe有一个远程src,这将不起作用?如果我错了,如果您能告诉我如何在不发送另一个HTTP请求的情况下仍能获取iframe内容,我将不胜感激,因为我需要执行javascript来构建iframe内容,如果可以避免的话,我不想部署第二个javascript环境。我有这样一个警告。但在我解释的最后。您必须遵守同一原产地政策。仅此而已。为了使上述功能正常工作,我必须将其包含在文档中。querySelector'id_description_iframe'。onload=function{…希望它能帮助某人。重要提示:如果iframe是跨域的,则无法访问其内容。请参阅。这很奇怪,但对我来说。body不起作用。然而。getElementsByTagName'body'[0]does.its not.body,just body。删除dot如果你使用的是香草javascript,这应该是答案。请始终将答案放在上下文中,而不是仅仅粘贴代码。有关更多详细信息,请参阅。纯代码答案被视为低质量:请确保提供代码的功能以及如何解决问题的解释。这将有助于如果您可以在文章中添加更多信息,请访问asker和未来读者。另请参阅解释完全基于代码的答案:
var iframeDocument = iframe.contentDocument || iframe.contentWindow.document;
if (!iframeDocument) {
    throw "iframe couldn't be found in DOM.";
}

var iframeContent = iframeDocument.getElementById('frameBody');

// or
var iframeContent = iframeDocument.querySelectorAll('#frameBody');
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 /*, ... */);
var frameObj = document.getElementById('id_description_iframe');

var frameContent = frameObj.contentWindow.document.body.innerHTML;
document.getElementsByTagName('iframe')[0].contentWindow.document.body.innerText;