将内容插入 iFrame

IT技术 javascript jquery html iframe
2021-02-01 08:02:38

我正在尝试将一些内容插入到“空白”iFrame 中,但是没有插入任何内容。

HTML:

<iframe id="iframe"></iframe>

JS:

$("#iframe").ready(function() {
    var $doc = $("#iframe").contentWindow.document;
    var $body = $("<body>").text("Test");
    $body.insertAfter($doc);
});

我正在调用该ready函数,所以我不明白为什么它没有插入。

5个回答

你真的不需要jQuery:

var doc = document.getElementById('iframe').contentWindow.document;
doc.open();
doc.write('Test');
doc.close();

jsFiddle 演示

如果你绝对必须使用 jQuery,你应该使用contents()

var $iframe = $('#iframe');
$iframe.ready(function() {
    $iframe.contents().find("body").append('Test');
});

jsFiddle 演示

请不要忘记,如果您使用 jQuery,则需要按如下方式挂接到 DOMReady 函数:

$(function() {  
    var $iframe = $('#iframe');
    $iframe.ready(function() {
        $iframe.contents().find("body").append('Test');
    });
});
有人遇到过 IE 引发的任何跨域安全验证吗?我正在用这个例子看到那些。关于如何解决的任何想法?
2021-03-19 08:02:38
我同意 jQuery 对于一些简单的 DOM 操作来说有点矫枉过正,但无论如何我已经为页面的其他部分提供了它,但感谢您的详细回复
2021-03-28 08:02:38
这不是一个糟糕的解决方案,因为当您使用 doc.write() 时,许多浏览器都会给您警告;这是非常不鼓励的。
2021-03-29 08:02:38
没问题,很高兴提供帮助。请记住,虽然使用 jQuery 并不总是最好的选择。在这个例子中,当然会更慢。
2021-04-06 08:02:38
改为var ifr = d.getElementById('iframe'), doc = ifr.contentDocument || ifr.contentWindow.document;. thinkofdev.com/得到它
2021-04-07 08:02:38

这应该做你想做的:

$("#iframe").ready(function() {
    var body = $("#iframe").contents().find("body");
    body.append('Test');
});

检查此JSFiddle以获取工作演示。

编辑:你当然可以做到一种线条样式:

$("#iframe").contents().find("body").append('Test');
@user2521439 是的。iframes 是用一个空白文档创建的。浏览器将自动添加<html><head></head><body></body></html>到 iframe 的 contentDocument。
2021-03-15 08:02:38
仅仅因为他将变量命名为 with$并不意味着它是 PHP 和 JS 的奇怪组合。例如,我实际上有时将保存 jQuery 对象的变量命名$testDiv为 。它帮助我跟踪代码中的 jQuery 对象......$变量名前面的前缀与 JS 语法无关......
2021-03-27 08:02:38
好的,抱歉,删除了冒犯性的语气。
2021-03-31 08:02:38
@PavelŠtěrba 没有采取:)
2021-04-07 08:02:38
如果您使用的是 jquery 函数find,这是否意味着 iframe 中已经有一个 body 标签——或者我错过了什么?
2021-04-10 08:02:38

您可以从 div 输入(例如)文本到 iFrame:

var $iframe = $('#iframe');
$iframe.ready(function() {
    $iframe.contents().find("body").append($('#mytext'));
});

和div:

<iframe id="iframe"></iframe>
<div id="mytext">Hello!</div>

和 JSFiddle 演示:链接

最好有英文文本(即使在这种情况下理解它不是很重要)。此外,作为一般提示,欢迎用几句话来解释您的解决方案的工作原理。它将避免人们分析代码以了解您的解决方案是否是他们正在寻找的。谢谢!
2021-03-27 08:02:38

等等,你真的需要使用 javascript 渲染它吗?

请注意,在 HTML5 中有srcdoc,它可以为您做到这一点!(缺点是 IE/EDGE 尚不支持https://caniuse.com/#feat=iframe-srcdoc

请参阅此处 [ srcdoc]:https : //www.w3schools.com/tags/att_iframe_srcdoc.asp

还有一点需要注意的是,如果你想避免js代码内外的干扰,你应该考虑使用sandbox模式。

请参阅此处 [ sandbox]:https : //www.w3schools.com/tags/att_iframe_sandbox.asp

如果您想要CSS在您的网页上的所有内容,请IFrame尝试以下操作:

var headClone, iFrameHead;

// Create a clone of the web-page head
headClone = $('head').clone();

// Find the head of the the iFrame we are looking for
iFrameHead = $('#iframe').contents().find('head');

// Replace 'iFrameHead with your Web page 'head'
iFrameHead.replaceWith(headClone);

// You should now have all the Web page CSS in the Iframe

祝你好运。