尝试找到在 TinyMCE 编辑器的 jQuery 版本中禁用单个键盘快捷键的位置。 目前允许的快捷键列表是:
目前正在寻求禁用除“撤消”、“重做”和“粗体”之外的所有快捷键。 其余的在我们的实现中是不必要的,因为它是不需要的格式。
我似乎找不到启用这些快捷方式的代码。 您能指出在哪里可以找到此代码吗?
尽管这有一个公认的答案,我还是会分享我在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
。
禁用在 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
方法。您也许能够覆盖默认行为。
好的,所以我能够让它发挥作用。 我能够使用上面 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 (我还嗅探 mac 的 Cmd+i 和 Cmd+u [尽管 Safari 赢了不允许您根据此链接测试cmd。其他所有我需要禁用的内容都被禁用。
在 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);
}
}
对于 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
});
}
})
TinyMCE5
// after init
for (const key in editor.shortcuts.shortcuts) {
editor.shortcuts.shortcuts[key].func = () => {};
}