2013-07-17 45 views
1

通过javascript(书签):我需要创建一个iframe,然后向它添加一个表单,然后提交表单的脚本。AppendChild在IE中的iframe

在Chrome下工作,但不是在IE:

var i = document.createElement('iframe'); // also give it id = iframe_id 
var frm = document.createElement('form'); // also add inputs and values 
var s = document.createElement('script'); // also add innerHTML that submits form 

document.body.appendChild(i); 
window.frames['iframe_id'].document.getElementsByTagName('body')[0].appendChild(frm); 
window.frames['iframe_id'].document.getElementsByTagName('body')[0].appendChild(s); 

在IE中我得到一个错误:未定义或空引用无法获取财产“的appendChild”

我试图追加表单和脚本添加到iframe中,然后将iframe添加到文档中:

i.appendChild(frm); 
i.appendChild(s); 
document.body.appendChild(i); 

我在Chrome中出现了一个奇怪的响应。表单提交的响应出现在阻止的弹出窗口中(而不是我所期望的)。在IE中似乎没有什么发生。

+0

您打算支持哪些版本的IE? – acdcjunior

回答

3

我建议最初使用write()直接写入文档。

演示:http://jsfiddle.net/QjPuZ/1/

代码:

var iframeDoc = i.contentDocument || i.contentWindow.document; 

iframeDoc.open(); 
iframeDoc.write("<html><body></body></html>"); 
iframeDoc.close(); 

iframeBody = iframeDoc.body; 
var frm = iframeDoc.createElement('form'); 
var s = iframeDoc.createElement('script'); 
iframeBody.appendChild(frm); 
iframeBody.appendChild(s); 
+0

这实际上似乎在伎俩。任何想法为什么? (想知道它是否会一直工作,或者是一个古怪的事情,也许不得不做一些额外的时间) – user984003

+0

@ user984003:我不完全确定实际上应该发生什么。 HTML5规范可能会说明一些事情。我只是在将内容加载到iframe中的过程中经历了很多尝试和错误。 –

0

你的榜样不只是因为该元件需要在框架内要创建工作。

var o = iframeDoc.createElement('form'); 
iframeDoc.appendChild(o); // "body" is not present in IE, but it works