1

我正在构建一个 CMS 应用程序,我现在正在为 IE 调试它。但事情发生了,我无法理解。

首先,我有一个包含页面内容的 div。我提取 div 的内容并使用 javascript 创建一个 iFrame 并将其附加到 div。这是为了制作所见即所得的编辑器。然后,当我想将内容添加到 iFrame 时,问题就开始了。由于某种原因,IE 无法访问 iFrame 的正文。我可以提醒 iFrame 的文档,它给了我 [object Document] 或 [object HTMLDocument],但是当我提醒正文时,我得到了 null。

我使用此函数将文档作为 javascript 对象的一部分:

iframedoc: function(aID) {
    if (document.getElementById(aID).contentDocument){
        return document.getElementById(aID).contentDocument;
    } else {
        var iFrame = document.getElementById(aID);
        return iFrame.contentWindow.document;
    }
},

这是我第一次称之为:

tas[i].innerHTML = "";
tas[i].appendChild(ta_edit_functions);
tas[i].appendChild(ta_edit);
tas[i].appendChild(ta_result);
alert(ta.iframedoc(ta_edit_id));
ta.iframedoc(ta_edit_id).body.innerHTML = ta_edit_content;
ta.iframedoc(ta_edit_id).designMode = 'on';

在这里,我清空 div,附加一个包含所见即所得函数、iFrame 和 textarea 的 div,以便最终提交表单。

我正在 IE 8 和 9 中进行测试。最奇怪的是,当我在 IE 8 中第一次调用 iframedoc 之前发出警报时,我突然得到了正文。

如果有人至少能指出我正确的方向,我将不胜感激。我真的不知道发生了什么。

4

2 回答 2

4

我正在 IE 8 和 9 中进行测试。最奇怪的是,当我在 IE 8 中第一次调用 iframedoc 之前发出警报时,我突然得到了正文。

这听起来好像你对浏览器来说太快了——当你试图弄乱它时,iframe 可能还没有完全加载,所以添加一个警报会给它额外的时间。onload尝试使用iframe 元素上的事件来推迟您的一些代码。

于 2012-05-21T01:06:46.397 回答
0

最终我的解决方案是使用间隔函数检查 iFrame 的主体是否可用。

但是随着这些错误的消失,我发现在 IE8 中打开 iFrame 的设计模式会删除它的所有内容。所以我最终只使用了一个 contenteditable div ..

于 2012-05-21T20:59:53.917 回答