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

问题描述:

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

  • CTRL + Z撤消
  • Ctrl + Y重做
  • Ctrl + B键大胆
  • CTRL + I斜体
  • ctrl + u下划线
  • CTRL + 1-6H1-H6
  • CTRL + 7 p
  • CTRL + 8 DIV
  • CTRL + 9个地址

目前希望禁用所有快捷键,但撤消,重做和大胆。其他人在我们的实施中由于不需要的格式而不太理智。

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

禁止在Firefox

测试这应该有助于让你开始。您可能需要实际添加ctrl+uctrl+i的空快捷键,以便在其他浏览器中将其禁用,但此代码已经过测试以禁用Firefox中的操作。只是tinyMCE的初始化运行后运行(我测试了萤火虫雷):

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+bctrl+i,并且ctrl+u版本,并且只壁虎的浏览器并不:

// 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方法。您可能可以覆盖默认行为。

+0

我更新了我的答案,包括有关如何禁用你不想快捷方式的样本。 – 2010-01-09 17:38:51

+0

那么,这个答案不会留下任何想要的。 :)撤回我的。 +1 – 2010-01-09 17:51:45

+0

@Pekka很好,谢谢:)起初我以为源码不得不被编辑,但他们的快捷系统实际上非常酷。 – 2010-01-09 17:55:27

好,所以我能够得到这个工作。我能够阻止使用道格的代码上面的Firefox来让IE禁用密钥的我想我不得不添加此代码后的道格的代码块。

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。我什么,直到内嵌框架加载完成,然后附上keydown事件和嗅探CTRL + ICTRL + I(我也嗅出Cmd的+我Cmd + U键为Mac [虽然Safari浏览器荣获“T让你根据这个link测试CMD。其他的都是残疾人,我需要禁用。

示例代码从允许IB和U在IE和FF来回切换。

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

尽管这有一个公认的答案呃,我会分享我用tinymce4的东西。你可以简单的setup方法中添加editor.addShortcut('ctrl+u', "", "")init事件的方法,这将覆盖添加快捷方式

例子:

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

您可以代替任何快捷键,你想禁用与ctrl+u在上面的代码。

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