如何深度克隆iframe?

cra*_*ish 5 javascript iframe

有没有办法深度克隆iframe?

基本的jQuery克隆只是使用相同的src创建另一个iframe.我想实现的是克隆的iframe的方式,它的准确的当前内容(即任何可能的输入值,通过JavaScript等任何DOM修改).

var clone = iframe.contents().find('html').clone();
Run Code Online (Sandbox Code Playgroud)

当我克隆HTML属性及其所有子项,修改等时,我遇到了以下问题:

  1. 我错过了DOCTYPE

  2. 如何将其插入新的iFrame?

Adr*_*tti 4

如果您克隆iframe创建另一个,iframe那么您就深度克隆了您的iframe!它的源在其他地方,当您分配其属性时它将被下载src

测试

想象一下,您有一个打印当前时间的(非缓存)页面作为源。在您的页面上放置一个iframe,等待 10 秒钟,然后克隆它。新的iframe将下载其内容,第二个iframe将有不同的内容(时间)。

“真正”的深度克隆

编辑:如果您需要深度原始克隆,您可以获取innerHTML并将其注入iframe内。迈克尔·马赫莫夫的解决方案:

// Creates the new iframe, add the iframe where you want
var newframe = document.createElement("iframe");
document.body.appendChild(newframe); 

// We need the iframe document object, different browsers different ways
var frameDocument = newFrame.document;
if (newFrame.contentDocument)
 frameDocument = newFrame.contentDocument;
else if (newFrame.contentWindow)
 frameDocument = newFrame.contentWindow.document;

// We open the document of the empty frame and we write desired content.
// originalHtmlContent is a string where you have the source iframe HTML content.
frameDocument.open();
frameDocument.writeln(originalHtmlContent);
frameDocument.close();
Run Code Online (Sandbox Code Playgroud)

  • 今天这个真的帮了我大忙——谢谢。使用打开/写入/关闭是我缺少的关键。仅使用“innerHTML”<b>不起作用</b>。 (2认同)