TinyMCE将项添加到上下文菜单

时间:2011-07-05 15:39:23

标签: javascript jquery tinymce contextmenu menuitem

我想在TinyMCE的上下文菜单中添加一个新的菜单项,并在用户点击它时执行一个命令,到目前为止,我有这个,这是行不通的:

tinyMCE.init({
...

setup : function(ed) {
    ed.onContextMenu.add(function(ed, menu) {
        menu.add({title : 'Menu 1', onclick : function() {
            alert('Item 1 was clicked.');
        }});
    });
}

上面的代码抛出一个错误,说“menu.add不是一个函数”,如果我删除menu.add东西并放置一个console.log(菜单),它会在打开上下文菜单时返回“contextmenu”。 / p>

将项目添加到上下文菜单的正确方法是什么?优选地,不必修改插件本身。提前谢谢。

2 个答案:

答案 0 :(得分:4)

你需要像

这样的东西
ed.onContextMenu.add(function(ed, e) {

if (!e.ctrlKey) {

    // Restore the last selection since it was removed
    if (lastRng)
        ed.selection.setRng(lastRng);

    var menu = this._getMenu(ed);

    if ((typeof menu).toLowerCase() == 'object')
    {
        menu.showMenu(e.clientX, e.clientY);

        Event.add(ed.getDoc(), 'click', function(e) {
            hide(ed, e);
        });
        Event.cancel(e);
    }
}

});

和函数_getMenu,您可以在其中插入contextmenu选项:

//example this will only display if an image was clicked
if (node !== "undefined" && node.nodeName.toLowerCase() == 'img') {

m.add({
    title: 'my menu',
});


m.addSeparator();

// Inline-Element editieren
m.add({
    title: 'to be choosen1',
    icon: 'http://...',
    cmd: 'undo'
});

t.onContextMenu.dispatch(t, m, el, col);

return m;
}

编辑:

你可以使用默认菜单(插件上下文菜单需要激活)

var editor = tinymce.get(editor_id);
var menu = editor.plugins.contextmenu._getMenu(editor);

在菜单中添加条目应该如下工作

menu.add({title : 'undo', icon : 'undo', cmd : 'Undo'});

可能需要使用showMenu显式呈现菜单。 将菜单插入contextemenu的另一种方法是修改tiny_mce / plugins / contextemneu目录中的editor_plugin.js并直接添加条目。您也可以复制插件,修改并重命名 - 让它作为自定义插件使用。

答案 1 :(得分:0)

您可以像这样添加上下文菜单:

setup : function(ed) {
    ed.onContextMenu.add(function(ed, menu) {
        displayContextMenu(ed,e);
        }});
    });
}

function displayContextMenu(ed,e){
    var m = ed.plugins.contextmenu._getMenu(ed);
    m.add({title : 'advanced.bold_desc', icon : 'bold', cmd : 'bold'});
}