Всё гениальное просто. В Gecko на инициализацию нового окна (в том числе и фрейма) требуется время; createElement (вернее, тут appendChild) идёт асинхронно и не требует времени на инициализацию окна, а дальше ты пытаешься в ту же секунду, пока фрейм ещё не создан целиком, установить одно из его свойств.
Делай так:
Код:
function editW() {
var fram = document.createElement('iframe');
fram.id = 'tempFrame';
fram.style.width = "200px";
fram.style.height="200px";
document.getElementById('wyz').parentNode.appendChild(fram);
crFrame('tempFrame');
}
function crFrame(fn) {
f = document.getElementById(fn);
if (!f.contentWindow.document.body) {
setTimeout("crFrame('" + fn + "')", 10);
return;
}
f.contentWindow.document.designMode = "On";
}
Проблема, однако же, ещё и в том, что ты некорректно его задаёшь. В одном моём проекте я использовал вот такой код:
Код:
var iFrameCode='<html id="' + name + '"><head><meta http-equiv="content-type" content="text/html; charset=utf-8" /></head><body>' + value + '</body></html>';
try {
var iFrame = document.getElementById("iFrName").contentWindow;
iFrame.designMode = 'On';
var iFrameDocument = iFrame.document;
iFrameDocument.open();
iFrameDocument.write(iFrameCode);
iFrameDocument.close();
} catch (e) {
if (this.gecko) {
setTimeout("crFrame('iFrName');", 10);
} else {
return false;
}
}
(это для примеру, код надо подстраивать под тебя)