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

问题描述 投票:0回答:6

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

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

目前正在寻求禁用除“撤消”、“重做”和“粗体”之外的所有快捷键。 其余的在我们的实现中是不必要的,因为它是不需要的格式。

我似乎找不到启用这些快捷方式的代码。 您能指出在哪里可以找到此代码吗?

jquery tinymce
6个回答
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


4
投票

禁用在 Firefox 中测试

这应该可以帮助您入门。您可能需要实际添加

ctrl+u
ctrl+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
jscripts/tiny_mce/classes/Editor.js
线定义的(来自完整的开发下载)。

此外,它们存储在

Editor.shortcuts
变量的数组中。它们的按键设置有特殊字符,然后是按键代码,如下所示:
ctrl,,,90

但据我所知,似乎许多浏览器都实现了自己的

ctrl+b
ctrl+i
ctrl+u
版本,而只有 Gecko 浏览器没有:

// Add default shortcuts for gecko
if (isGecko) {
    t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');
    t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');
    t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');
}

但是如果你环顾四周,你就会发现他们是如何启用它的。

此外,请查看

Editor.addShortcut
方法。您也许能够覆盖默认行为。


4
投票

好的,所以我能够让它发挥作用。 我能够使用上面 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+uCtrl+i。 我直到 iFrame 完成加载,然后附加一个 keydown 事件并嗅探 Ctrl+iCtrl+i (我还嗅探 mac 的 Cmd+iCmd+u [尽管 Safari 赢了不允许您根据此链接测试cmd。其他所有我需要禁用的内容都被禁用。


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);
  }
}

0
投票

对于 TinyMCE v4:编辑器主体中可用的键盘快捷键列表

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

0
投票

TinyMCE5

// after init
for (const key in editor.shortcuts.shortcuts) {
  editor.shortcuts.shortcuts[key].func = () => {};
}
© www.soinside.com 2019 - 2024. All rights reserved.