在iframe元素中添加动态元素而不是我创建

时间:2010-04-21 10:41:45

标签: javascript iframe dynamic

如果我创建一个动态的IFRAME元素并且我动态地将元素聚合到新的iframe,那么我有一个小问题。它的工作原理如果我这样做:

var miiframe=document.getElementById("miiframe");
var myElement=content.document.createElement("LABEL");
myElement.innerHTML="blabla";
miiframe.contentDocument.body.appendChild(myElement);

但如果我这样做不起作用:

var miiframe=content.document.createElement("IFRAME");
miiframe.src="about:blank";
document.body.appendChild(miiframe);
var myElement=content.document.createElement("LABEL");
myElement.innerHTML="blabla";
miiframe.contentDocument.body.appendChild(myElement);

我看到了iframe,但我看不到标签元素。 最好的是,如果我在appendElement之前做并提醒它有效!!!

var miiframe=content.document.createElement("IFRAME");
miiframe.src="about:blank";
document.body.appendChild(miiframe);
var myElement=content.document.createElement("LABEL");
myElement.innerHTML="blabla";
alert("now works!!!");
miiframe.contentDocument.body.appendChild(myElement);

使用DIV元素,但我想用IFRAME元素!!!

此代码适用于Firefox。 谢谢!

2 个答案:

答案 0 :(得分:8)

如果您将“ src ”放入iframe,它会尝试加载此来源(即使它是“ about:blank ”)。加载完成后,它会覆盖您的标签。您可以添加一个侦听器来等待iframe加载:

var miiframe=content.document.createElement("IFRAME");
miiframe.src="about:blank";
miiframe.addEventListener('load', function (e) {
    var myElement=content.document.createElement("LABEL");
    myElement.innerHTML="blabla";
    miiframe.contentDocument.body.appendChild(myElement);
}, false);

document.body.appendChild(miiframe);

答案 1 :(得分:2)

我的情况有点不同,我没有指定任何来源我只是想创建一个HTML编辑器,我正在做这样的事情:

function init() {
    var iframe = document.createElement("iframe");
    iframe.setAttributes('id','edit');
    document.body.appendChild(iframe);
    var y = document.getElementById('edit');
    y.contentDocument.designMode = 'On';
}

但是那从来没有奏效,好奇的是,当我在一些ifs中放入一些警告时,例如if('y中的'designMode')和类似的东西,在几次警报后我能够在iframe上写。 ......:S

非常感谢你的帮助,你的解释很清楚,iframe总是试图加载......它会覆盖之前的任何其他指令......所以我改了它,现在正在100%工作:)

function init() {
    var iframe = document.createElement("iframe");
    iframe.addEventListener('load', function () {
    iframe.contentDocument.designMode="on";
    }, false);
    document.body.appendChild(iframe);
}