TinyMCE - 在IE中的光标位置插入内容不起作用

时间:2012-06-26 09:51:30

标签: internet-explorer tinymce

我正在尝试在当前光标位置插入一些内容或替换TinyMCE编辑器实例中的选定内容。我正在使用这个:

tinyMCEPopup.editor.selection.setContent(content);

其中content是我要插入的HTML字符串。

它在Firefox,Opera和Chrome上运行良好,但在IE中不起作用。相反,它会在编辑器的开头插入内容,而不是选择内容。我也试过了:

tinyMCEPopup.execCommand('mceInsertContent', false, content);

再次,IE中的行为相同。用于插入特殊字符的TinyMCE代码使用上面的功能,并且有效!我试过在我的插件中复制它仍然没有快乐...

function insertChar(chr) {
    tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');

    // Refocus in window
    if (tinyMCEPopup.isWindow)
        window.focus();

    tinyMCEPopup.editor.focus();
    tinyMCEPopup.close();
}

更新

仍然没有在IE中工作,Opera甚至没有在工具栏中显示我的插件按钮(尽管这可能是一个单独的问题)!我现在也尝试过jQuery插件,让编辑器加载,但是无法调用mceInsertContent方法,即使使用它:

$('#my-editor-id').tinymce().execCommand('mceInsertContent', false, content);

出现错误:“对象没有方法:tinymce” - 也许我不能通过弹出窗口调用它?!

3 个答案:

答案 0 :(得分:4)

你试过打电话:

tinyMCEPopup.restoreSelection(); 

之前打电话

tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');

答案 1 :(得分:3)

问题是当你点击编辑器外的按钮或链接之类的东西时,TinyMCE会丢失当前光标位置,导致它失去焦点。
要解决此问题,请使用按钮或链接的mousedown事件。这样,您可以在焦点丢失之前执行插入操作。

$("#insert_link").mousedown(function (e) {
    var editor = tinyMCE.get("editor");
    editor.execCommand('mceInsertContent', false, "Insert Value");
    e.preventDefault();
});

答案 2 :(得分:2)

在类似场景中对我有用的东西,以及可能在此处解决的问题 - 使用

editor.selection.getBookmark();

失去编辑的焦点之前 和

editor.selection.moveToBookmark();

插入内容之前。

问题是,在FF中,当您将光标放在包含文本的文本字段中的某个位置时,然后单击其他位置并返回(即通过按Tab键),插入符将显示在焦点之前的位置丢失了。在IE中,它将返回到开头。我希望这会有所帮助。