1

我一直在使用editor.plugins.contextmenu.onContextMenu.add自定义 TinyMCE 3.x 中的上下文菜单插件,但不能在 4.0 版中使用它

这是我收到的错误:

TypeError: a.plugins.contextmenu.onContextMenu is undefined

我的插件代码是:

tinymce.PluginManager.add("example", function(a,b) {
  a.plugins.contextmenu.onContextMenu.add(function(th, menu, event) {
    //my code for customizing contextmenu
  })
  a.addButton("exampleHelp", {
  text : "help",
  icon : !1,
  onclick : function() {
    //some code
  }
  })    
});

它与init我在 3.X 版本中使用的功能有关吗?

4

3 回答 3

2

通过查看表格插件代码,我能够对解决方案进行逆向工程。

tinymce.init({
    plugins: "contextmenu",
    contextmenu: "link image inserttable | cell row column deletetable | myMenuItem"
});


// Inside plugin
editor.addMenuItem('myMenuItem', {
    text: 'My Menu Item',
    context: 'div', // not sure what this does
    onPostRender: postRender,
    onclick: function() { console.log('hi!'); }
});

// Determine whether menu item is visible
function postRender() {
    handleDisabledState(this, 'div.myCustomItem');
}

function handleDisabledState(ctrl, selector) {
    function bindStateListener() {
        ctrl.visible(editor.dom.getParent(editor.selection.getStart(), selector));
        editor.selection.selectorChanged(selector, function(state) {
            ctrl.visible(state);
        });
    }

    if (editor.initialized)
        bindStateListener();
    else
        editor.on('init', bindStateListener);
}

所以上下文菜单应该只在它位于 div.myCustomItem 元素内时呈现。如果您希望上下文菜单项始终可见,请注释掉 handleDisabledState()

于 2013-10-18T20:56:52.460 回答
1

现在我找到了一个临时解决方案:

a.on("contextmenu",function(n){
// console.log($(a.getDoc()).find(' .mce-floatpanel.mce-menu'));
// find a way to add it into current context menu instead of deleting it
$(a.getDoc()).find(' .mce-floatpanel.mce-menu').remove();
var i;
var o=[]
o.push({text:'option1'})
o.push({text:'option2'})
o.push({text:'menu option', menu:o})
t=new tinymce.ui.Menu({items:o,context:"contextmenu"}),t.renderTo(document.body)
// fix positioning
var r={x:n.pageX,y:n.pageY};
a.inline||(r=tinymce.DOM.getPos(a.getContentAreaContainer()),
r.x+=n.clientX,r.y+=n.clientY),t.moveTo( r.x,r.y),
a.on("remove",function()  {t.remove(),t=null})
})

我删除了默认上下文菜单并将其替换为我的自定义菜单。但我仍然需要知道如何将我的项目添加到默认上下文菜单

于 2013-06-20T12:40:31.267 回答
0

我找到了有关如何即时自定义 TinyMCE (4.1.9) 联系菜单的解决方案,请在此页面上查看我的回复和建议的解决方案:http: //archive.tinymce.com/forum/viewtopic.php?pid =116109# p116109

谢谢,尼克

于 2015-04-25T10:21:32.713 回答