2013-07-17 3 views
1

Через javascript (букмарклет): Мне нужно создать iframe, а затем добавить в него форму, а затем скрипт, который отправит форму.AppendChild to iframe в IE

следующие работы в 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 к документу:

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

я получаю странный ответ в Chrome. Ответ от формы submit появляется в заблокированном всплывающем окне (вместо того, чтобы вообще не появляться, что я ожидаю). В 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 
Смежные вопросы