在TinyMCE编辑器中限制键盘快捷键

时间:2010-01-09 17:00:04

标签: jquery tinymce

尝试在jQuery版本的TinyMCE编辑器中找到禁用单个键盘快捷键的位置。目前,允许的快捷方式列表是:

  • ctrl + z 撤消
  • ctrl + y 重做
  • ctrl + b Bold
  • ctrl + i Italic
  • ctrl + u 下划线
  • ctrl + 1-6 h1-h6
  • ctrl + 7 p
  • ctrl + 8 div
  • ctrl + 9 地址

目前正在寻找禁用所有快捷方式,但撤消,重做和加粗。其余的在我们的实现中是不合理的,因为它是不需要的格式化。

我似乎无法找到启用这些快捷方式的代码。你能指出在哪里找到这个代码。

5 个答案:

答案 0 :(得分:8)

即使这有一个公认的答案,我也会与tinymce4分享我的用法。您只需将editor.addShortcut('ctrl+u', "", "")添加到init方法中的setup事件方法,该方法将覆盖添加的快捷方式

示例:

tinyMCE.init({
    // Your options here
    setup: function(editor) {
        editor.on("init", function(){
            editor.addShortcut("ctrl+u", "", "");
        });
    }
})

您可以使用上述代码中的ctrl+u替换您要禁用的任何快捷方式。

答案 1 :(得分:4)

禁用在Firefox中测试

这应该有助于您入门。您可能需要为ctrl+uctrl+i添加空快捷方式以在其他浏览器中禁用它,但此代码已经过测试以禁用Firefox中的操作。刚刚运行tinyMCE初始化后运行(我在Firebug中测试过我的):

for(var i in tinyMCE.editors){
  var editor = tinyMCE.editors[i];
  for(var s in editor.shortcuts){
    var shortcut = editor.shortcuts[s];
    // Remove all shortcuts except Bold (66), Redo (89), Undo (90)
    if(!(s == "ctrl,,,66" || s == "ctrl,,,89" || s == "ctrl,,,90")){
       // This completely removes the shortcuts
       delete editor.shortcuts[s];

       // You could use this instead, which just disables it, but still keeps
       // browser functionality (like CMD+U = show source in FF Mac) from interrupting the flow
       // shortcut.func = function(){  };
    }
  }
}

<强>背景

它似乎是在2294的{​​{1}}行附近定义的(来自完整开发下载)。

此外,它们存储在jscripts/tiny_mce/classes/Editor.js变量的数组中。它们的键设置有特殊字符,然后是键码,如下所示:Editor.shortcuts

但据我所知,许多浏览器似乎都实现了自己的ctrl,,,90ctrl+bctrl+i版本,并且只有Gecko浏览器才会这样做:

ctrl+u

但如果你环顾四周,你可以看到他们是如何启用它的。

此外,请查看Editor.addShortcut方法。您可以覆盖默认行为。

答案 2 :(得分:3)

好的,所以我能够让它发挥作用。我能够使用上面的Doug代码来阻止firefox以使IE禁用密钥我希望在Doug的代码块之后我必须添加这个代码。

var $iframe = $('iframe').contents().get(0);

$($iframe).keydown(function(oEvent) {
    //italics (ctrl+i & Cmd+i [Safari doesn't allow you to test for Cmd])
    if (oEvent.keyCode == '73' && (oEvent.metaKey || oEvent.ctrlKey)){
        oEvent.preventDefault();
        return false;
    }

    //underline (ctrl+u & cmd+u [Safari doesn't allow you to test for cmd])
    if (oEvent.keyCode == '85' && (oEvent.metaKey || oEvent.ctrlKey)){
        oEvent.preventDefault();
        return false;
    }
});

所以基本上TinyMCE会动态地将编辑器作为iFrame加载,所以我从iFrame中禁用了 Ctrl + u Ctrl + i 。我是什么,直到iFrame完成加载,然后附加一个keydown事件和嗅探 Ctrl + i Ctrl + i (我也嗅 Cmd + i Cmd + u [虽然Safari不允许你根据这个link测试cmd。其他所有其他东西都被禁用,我需要禁用。

答案 3 :(得分:3)

在IE和FF中允许I B和U来回切换的示例代码。

var ctrlKey = false;

function removeShortcuts(){
  var e = tinyMCE.activeEditor;
  for (var s in e.shortcuts){
    if(s=="ctrl,,,73" || s=="ctrl,,,85" || s="ctrl,,,66"){
      e.shortcuts[s].func = function(){};
    }
  }
  e.onKeyUp.add(onKeyUp);
  e.onKeyDown.add(onKeyDown);
}

function resetShortcuts(){
  var e = tinyMCE.activeEditor;
  if (isGecko) {
    e.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
    e.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
    e.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
  }
  e.onKeyUp.remove(onKeyUp);
  e.onKeyDown.remove(onKeyDown);
}


function onKeyUp(editor, event){
  if(event.keyCode == 17){
    ctrlKey = false;
  }
}

function onKeyDown(editor, event){
  if(event.keyCode == 17){
    ctrlKey = true;
  }
  if(ctrlKey && (event.keyCode == 73 || event.keyCode == 85 || event.keyCode == 66){
    tinymce.dom.Event.cancel(event);
  }
}

答案 4 :(得分:0)

对于TinyMCE v4:List of keyboard shortcuts available within the editor body

tinyMCE.init({       
    setup: function(editor) {
        editor.on("init", function(){
            editor.shortcuts.remove('meta+u', '', ''); // "meta" maps to Command on Mac and Ctrl on PC          
        });
    }
})