Как глубоко клонировать iframe? - PullRequest
5 голосов
/ 14 марта 2012

Есть ли способ глубокого клонирования iframe?

Базовое клонирование jQuery просто создает другой iframe с тем же src. То, чего я хочу добиться, - это способ клонировать iframe и его точное текущее содержимое (т. Е. Любые возможные входные значения, любые модификации DOM через javascript и т. Д.).

var clone = iframe.contents().find('html').clone();

Когда я клонирую атрибут HTML и все его дочерние элементы, модификации и т. Д., У меня возникают следующие проблемы:

  1. Мне не хватает DOCTYPE

  2. как мне вставить его в новый iFrame?

Ответы [ 2 ]

4 голосов
/ 14 марта 2012

Если вы клонируете iframe, создавая еще один iframe, то вы deep клонируете свой iframe!Его источник находится где-то еще, и он будет загружен, когда вы назначите его атрибут src.

Test

Представьте, что у вас есть источник ( non cached ) страницакоторый печатает текущее время.Поместите iframe на свою страницу, подождите 10 секунд, затем клонируйте его.Новый iframe будет загружать свой контент, а второй iframe будет иметь другой контент (время).

«Настоящее» глубокое клонирование

РЕДАКТИРОВАТЬ :если вам нужен глубокий необработанный клон, вы можете получить innerHTML и вставить его в iframe.Решение от Michael Mahemof :

// 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();
0 голосов
/ 14 марта 2012

Не можете ли вы клонировать contents():

var clone = iframe.contents().clone();

, а затем вставить его в другой кадр, используя:

iframe2.append(clone);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...