gpt4 book ai didi

javascript - 如何使用iframe或shadow dom创建跨浏览器子文档?

转载 作者:行者123 更新时间:2023-12-03 21:52:11 25 4
gpt4 key购买 nike

我想用 JavaScript 创建一个完全封装的子文档,有自己的 <head> , <body> 、样式、html 和 js。基本上是一个 Shadow dom,或者一个 iframe,但没有 src 属性。

虽然我喜欢 Shadow dom 的想法,但它的 support is very low,因此还没有准备好迎接黄金时段。

所以我一直致力于创建一个 iframe,但一路上遇到了各种障碍。 Here is a jsFiddle demonstrating my various attempts.

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));

它是一个文档,但不在元素内部那么让我们尝试将其放入 dom 中或另一个元素内部?以下两种尝试都不起作用,因为选择器没有上下文或其他内容......

$('body').append(iframe3Contents);
var generatedIframe = $('<iframe />').append(iframe3Contents);

我希望能够创建 iframe/subdocuemnt 而不向 dom 添加任何内容...但如果必须的话,我仍然希望能够随后将其从 dom 中删除并在 js 中进一步管理它。

我有这个小函数,它不起作用,但说明了我想要创建的 iframe 或子文档生成器的类型

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;
}
}

最佳答案

要从框架访问信息(或写入框架),它必须位于 DOM 中。它可以被隐藏,但它仍然必须存在于框架对象中。 JQuery 通过框架对象访问 iFrame,当从 dom 中删除时,它也会从框架对象中删除

为了将来任何遇到这个问题的人引用,您可以像这样获得封装:

$('#iframeGenerator2').contents().find('html').html(frame2HTML);

这是一个示例:http://jsfiddle.net/yP34y/4/

在 jsfiddle 示例中,请注意,所有内容只有在添加到 DOM 后才起作用。

关于javascript - 如何使用iframe或shadow dom创建跨浏览器子文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com