4

在 Chrome 的网络检查器中,如果您右键单击一个 DOM 元素,则会有一个“复制为 HTML”选项,通常会为您提供该元素及其所有子元素的 HTML 字符串。但是,尽管 IFrame 标记的内容在检查器中显示为子节点,但它似乎从未包含这些内容。

该问题不是由跨域限制引起的:即使是同域 IFrame 也不会从复制的 HTML 中排除。

除了复制和粘贴每个嵌套 IFrame 的 HTML 根目录并在文本编辑器中手动将它们拼接在一起之外,有什么办法可以解决这个问题?我为一个网站工作,该网站的第三方广告脚本通常会生成大型、蔓延的嵌套 IFrame 树,我需要一种方法让同事能够复制和粘贴该结构,这样我就可以在不坐下来的情况下调试广告问题在他们的办公桌上。

4

3 回答 3

3

我相信谷歌浏览器已经在他们的浏览器中的某个地方硬编码了行为,但我没有时间找到代码部分。

这是一个解决方法,它将使用谷歌浏览器从网页上当前的所有 iframe 中获取 html。

设置:

  • 关闭所有 Google Chrome 浏览器,然后在禁用网络安全的情况下启动 Google Chrome。否则运行DisplayIframeContent.js会产生这样的错误。
不安全的 JavaScript 尝试使用 URL 访问框架...

例子:

cd LOCATION\OF\GOOGLE\CHROME
chrome.exe --disable-web-security

加载 Google Chrome 时,您应该会看到一条黄色警告,说明:

您正在使用不受支持的命令行标志:--disable-web-security。稳定和安全将受到影响。

用法:

  • 启动 Google Chrome 后,打开您的测试网站。
  • F12打开开发工具。
  • 将jQuery的内容复制并粘贴到控制台中。
  • DisplayIframeContent.js在控制台内复制并粘贴。

DisplayIframeContent.js

// @author Larry Battle <bateru.com/news> 12.13.2012
// requires jQuery 1.8.3+
clear();
if( !$("iframe").length ){
    console.log("No iframes were found");
}else{
    $("iframe").each(function (i) {
        console.log( "### iframe[%s].src = (%s)", i, $(this).attr("src") );
        console.log( $(this).contents().find("html").html() )
    });
}
"done";
  • 从控制台复制并粘贴输出。

预期输出:

示例 URL:http: //jsfiddle.net/28yrA/ 输出:

### iframe[0].src = (javascript:false)
...HTML...
### iframe[1].src = (javascript:false)
...HTML...
### iframe[2].src = (javascript:false)
...HTML...
### iframe[3].src = (http://fiddle.jshell.net/28yrA/show/)
...HTML...
"done"
于 2012-12-14T00:20:35.193 回答
1

我终于找到了一个解决方案,通过DW-dev的一个名为Save Page WE的 Chrome 扩展程序。

https://chrome.google.com/webstore/detail/save-page-we/dhhpefjklgkmgeafimnjhojgjamoafof

它也可用于 Firefox。 https://addons.mozilla.org/en-US/firefox/addon/save-page-we/

于 2020-01-22T16:02:19.483 回答
0

另一个答案可能有效,但我不喜欢仅仅为了复制一些 html 而禁用安全性。

恕我直言,这是另一种更简单的方式。

首先检查元素并复制元素,然后将其iframe粘贴到您要添加的任何位置。

结果应该是iframe带有所有属性的空标签:

<iframe src="src"></iframe>

现在在里面iframe手动输入#documentDOCTYPE所以你现在有类似的东西:

<iframe>
    #document
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
</iframe>

将 iframe 中文档的父节点复制为 html,它将复制所有子节点,就像您复制普通的 html 页面一样。

只需粘贴回 doctype 下,您就拥有了整个iframe. 最终结果应该是这样的

<iframe>
    #document
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
        <!-- All the child nodes -->
    </html>
</iframe>
于 2015-04-17T22:03:00.620 回答