使用 jQuery 获取 iframe 的 HTML 内容

Posted

技术标签:

【中文标题】使用 jQuery 获取 iframe 的 HTML 内容【英文标题】:Getting the HTML content of an iframe using jQuery 【发布时间】:2012-02-07 12:31:44 【问题描述】:

我目前正在尝试稍微自定义 OpenCms(基于 Java 的开源 CMS),它使用嵌入式 FCKEditor,这是我尝试使用 js / jQuery 访问的内容。

我尝试获取 iframe 的 html 内容,但是总是返回 null。 这就是我尝试从 iframe 中获取 html 内容的方式:

var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame');
alert( $(editFrame).attr('id') );         // returns the correct id
alert( $(editFrame).contents().html() );  // returns null (!!)

查看屏幕截图,我要访问的是“LargeNews1/Teaser”html 部分,该部分当前包含值“Newsline en...”。 下面还可以看到 Firebug 中的 html 结构。

但是,$(editFrame).contents().html() 返回 null,我不知道为什么,而 $(editFrame).attr('id') 返回正确的 id。

iframe 内容/FCKEditor 在同一个站点/域上,没有跨站点问题。

iframe 的 HTML 代码在http://pastebin.com/hPuM7VUz

更新:

这是一个可行的解决方案:

var editArea = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame').contentWindow.document.getElementById('xEditingArea');                        
$(editArea).find('iframe:first').contents().find('html:first').find('body:first').html('some <b>new</b><br/> value');

【问题讨论】:

【参考方案1】:

.contents().html() 无法获取 IFRAME 的 HTML 代码。您可以通过以下方式获取:

$(editFrame).contents().find("html").html();

这应该会为您返回 IFRAME 中的所有 HTML。或者您也可以使用“body”或“head”而不是“html”来获取这些部分。

【讨论】:

谢谢,很多有用的回复;我编辑了我的问题并在底部添加了最终解决方案。 这适用于 Firefox,但不适用于 chrome。我只是得到 .【参考方案2】:

看起来 jQuery 没有提供获取 iFrame 的整个 HTML 的方法,但是由于它提供了对本地 DOM 元素的访问,因此可以使用混合方法:

$("iframe")[0].contentWindow.document.documentElement.outerHTML;

这将返回 iFrame 的 HTML,包括 &lt;THTML&gt;&lt;HEAD&gt;&lt;BODY&gt;

【讨论】:

【参考方案3】:

在尝试了一些推荐使用以下选项的jQuery 解决方案后,我发现我无法获得包括父标签在内的实际&lt;html&gt; 内容。

$("#iframeId").contents().find("html").html()

这对我来说效果更好,我能够以字符串的形式获取整个 &lt;html&gt;...&lt;/html&gt; iframe 内容。

document.getElementById('iframeId').contentWindow.document.documentElement.outerHTML

【讨论】:

【参考方案4】:

您的 iframe:

<iframe style="width: 100%; height: 100%;" frameborder="0" aria-describedby="cke_88" title="Rich text editor, content" src="" tabindex="-1" allowtransparency="true"/>

我们可以从这个iframe中获取数据:

var content=$("iframe").contents().find('body').html();
alert(content);

【讨论】:

【参考方案5】:

你可以得到内容为

$('#iframeID').contents().find('#someID').html();

但是框架应该在同一个域中引用http://simple.procoding.net/2008/03/21/how-to-access-iframe-in-jquery/

【讨论】:

【参考方案6】:

我建议将第一行替换为:

  var editFrame = $('#ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame');

...和第二个警报表达式:

  editFrame.html()

另一方面,如果您希望完成相同的 w/o jquery(更酷,恕我直言)可以只使用 javascript

  var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame');
  alert(editFrame.innerHTML);

【讨论】:

jQuery 不能很好地处理带有点的 DIV。在 id 中,不幸的是,我无法(轻松)更改 FCKEditor 组件的 id。我将测试上面的建议,稍后将发布我最终使用的解决方案。谢谢大家。【参考方案7】:

我认为 FCKEditor 有自己的 API 请参阅 http://cksource.com/forums/viewtopic.php?f=6&t=8368

【讨论】:

以上是关于使用 jQuery 获取 iframe 的 HTML 内容的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery 获取 iframe 的 HTML 内容

如何使用 jquery 从 iframe 获取内容? [复制]

使用jquery获取iframe内的元素属性

使用 jquery 选择器获取 iframe 内容

jQuery怎么给iframe赋值

jquery如何在html页面取得iframe的元素