好的,其他所有浏览器都可以正常使用我编码的方法,但由于某些原因Internet Explorer无法正常工作。我花了几个小时的时间(比实际开发这个功能的时间还多!)兼容性并且接近放弃了!
我有一个论坛,它的一个简洁功能是WYSIWYG编辑器。为此,我基本上有一个IFrame作为文档:
<iframe name="writer" src="/scripts/blank.html" class="writer"></iframe>
这是JavaScript的当前状态(不断更新):
function initEditor()
{
w = frames['writer']
wc = g('writerCopy')
if(w == null) return
frames['writer'].document.designMode = 'on'
frames['writer'].document.body.innerHTML = styleSheet+wc.value
frames['writer'].focus()
}
现在部分工作,但在线上失败了:
frames['writer'].document.body.innerHTML = styleSheet+wc.value
在Internet Explorer中,“'frames.writer.document.body'为null或不是对象”。
答案 0 :(得分:1)
您是否已激活IE的debugging facilities?
答案 1 :(得分:1)
我甚至不确定IE是否支持该designMode。
并且.contentDocument只有IE8,IE7和更少使用.contentWindow.document,但是iframe窗口是frame-collection的一部分。
试试这个,应该是crossbrowser:
<iframe name="writer"></iframe>
frames["writer"].document.body.innerHTML = "some html...";
答案 2 :(得分:1)
您需要将iframe指向IE的虚拟文档。只需使用以下内容创建文件blank.html
:
<html><body></body></html>
并设置<iframe src="blank.html" ... >
然后,您可以将frame.document.body.innerHTML = '...'
引用到您的心中。
答案 3 :(得分:1)
显然IE8在加载整个父页面之前不会使框架元素可用。另请注意,您可以在加载父页面之前写入帧,但这会覆盖帧并阻止加载。
简单的解决方案是将InitEditor()调用从正文内部移动到此处:
<body onload="InitEditor()">
答案 4 :(得分:1)
也许还没有加载iframe。我可以复制你的“'frames.writer.document.body'是null或不是对象”错误。我在它周围添加了一个setTimeout然后它为我工作。
setTimeout(function () {
frames['writer'].document.body.innerHTML = "some text";
}, 200);
答案 5 :(得分:0)
我在这里遗漏了什么吗?不应该使用类似的东西:
window.frames[nameOrNumberOfFrame]...
另见MSDN:
此集合仅包含窗口 对象并不提供访问权限 相应的框架和iframe 对象。要访问这些对象,请使用 文档的所有集合 包含对象。
答案 6 :(得分:0)
最后我使用了frame ['frameName']。document.write('someText'),但只有当另一个方法失败时才会使用。