3

好的,其他所有浏览器都可以使用我目前编写的方法正常工作,但由于某种原因 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' 为空或不是对象”。

4

7 回答 7

1

你激活了 IE 的调试 工具了吗?

于 2009-01-21T18:16:20.590 回答
1

我什至不确定 IE 是否支持该设计模式。

而且,.contentDocument 只是 IE8,IE7 和较少使用 .contentWindow.document,但 iframe 窗口是框架集合的一部分。

试试这个,应该是跨浏览器:

<iframe name="writer"></iframe>

frames["writer"].document.body.innerHTML = "some html...";
于 2009-01-21T18:33:41.507 回答
1

您需要将 iframe 指向 IE 的虚拟文档。只需blank.html使用以下内容创建一个文件:

<html><body></body></html>

并设置<iframe src="blank.html" ... >

然后你可以去参考frame.document.body.innerHTML = '...'你的内心内容。

顺便说一句,这是一个糟糕的问题标题。

于 2009-01-22T03:47:28.207 回答
1

显然,IE8 在整个父页面加载完成之前不会使框架元素可用。另请注意,您可以在父页面加载之前写入框架,但这会覆盖框架并阻止它被加载。

简单的解决方案是将 InitEditor() 调用从正文内部移动到此处:

<body onload="InitEditor()">
于 2009-08-01T00:32:43.890 回答
1

可能 iframe 尚未加载。我可以复制您的“'frames.writer.document.body' 为空或不是对象”错误。我在它周围添加了一个 setTimeout,然后它对我有用。

setTimeout(function () {
    frames['writer'].document.body.innerHTML = "some text";
}, 200);
于 2010-02-17T20:32:49.617 回答
0

我在这里错过了什么吗?你不应该使用类似的东西:

window.frames[nameOrNumberOfFrame]...

另请参阅MSDN

此集合仅包含窗口对象,不提供对相应框架和 iframe 对象的访问。要访问这些对象,请使用包含这些对象的文档的all集合。

于 2009-01-21T20:04:37.470 回答
0

最后我使用了 frames['frameName'].document.write('someText') 但只有在其他方法失败的情况下。

于 2009-01-25T12:38:03.393 回答