Я хочу создать полностью инкапсулированный поддокумент в JavaScript с его собственными <head>
, <body>
, стилями, html и js. В основном теневое dom или iframe, но без атрибута src.
Хотя мне нравится идея теневого домика, поддержка очень низкая, и, следовательно, не готова к прайм-тайм.
Итак, я работаю над созданием iframe, но на этом пути побывал целый ряд дорожных блоков. Вот jsFiddle, демонстрирующий мои различные попытки.
IFrame не может существовать в dom. Эта часть имеет решающее значение. Чтобы прояснить, это нормально, если оно на мгновение существует в dom, но оно должно быть доступно и доступно только в JS.
$('body').append('<iframe id="iframeGenerator" />');
var iframe3 = $('#iframeGenerator');
var iframe3Contents = iframe3.contents();
$('#iframeGenerator').remove();
var head = iframe3.contents().find('head');
сладкий, у нас есть голова
console.log(head.length);
но как выглядит содержимое?
console.log(iframe3Contents.get(0));
Это документ, но не внутри элемента поэтому попробуем поместить его в дом или внутри другого элемента? обе следующие попытки не работают, потому что селектор не имеет контекста или чего-то еще...
$('body').append(iframe3Contents);
var generatedIframe = $('<iframe />').append(iframe3Contents);
Я хотел бы иметь возможность создавать iframe/subdocuemnt, не добавляя ничего в dom... но если я должен, я все равно хотел бы, чтобы впоследствии удалить его из dom и управлять им дальше в js.
У меня есть эта небольшая функция, которая не работает, но иллюстрирует тип генератора iframe или subdocument, который я хотел бы создать
var iframeHtml;
giveMeIframe = function() {
var iframeContents;
if (iframeHtml) {
return iframeHtml;
} else {
$('body').append('<iframe id="iframeGenerator" style="display: none" />');
iframeContents = $('#iframeGenerator').contents();
iframeHtml = $('<iframe />');
iframeHtml.append(iframeContents);
$('#iframeGenerator').remove();
return iframeHtml;
}
}