2010-04-21 143 views
2

我有一个litle问题,如果我创建一个动态的IFRAME元素,我动态地将元素聚合到新的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,但我没有看到标签元素。 最coulous是如果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。 谢谢!

+0

而将它停止加载它 后这个答案 miiframe.contentWindow.stop(); – Marwan 2013-09-12 14:39:27

回答

7

如果你把“SRC”到iframe,它会尝试加载此源(即使它是一个“约:空白”)。加载完成后,它会覆盖您的标签。您可以添加一个监听等待的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); 
+0

它的作品,非常感谢你! – user322172 2010-04-21 13:41:47

+0

不客气。 – 2010-04-21 14:04:58

+0

'content.document'不适合我.... – LamonteCristo 2013-03-28 23:20:58

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中放置一些警报,例如('designMode'in y)等等,在几次警报之后,我能够在iframe ....:S

非常感谢您的帮助,您的解释是清晰,IFRAME总是尝试加载....之前,将覆盖任何其他指令,所以,我改变了它,现在正在开发一种100%:)

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