限制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+u
和ctrl+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+b
,ctrl+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
方法。您可能可以覆盖默认行为。
好,所以我能够得到这个工作。我能够阻止使用道格的代码上面的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 + U和CTRL + I。我什么,直到内嵌框架加载完成,然后附上keydown事件和嗅探CTRL + I和CTRL + 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
});
}
})
我更新了我的答案,包括有关如何禁用你不想快捷方式的样本。 – 2010-01-09 17:38:51
那么,这个答案不会留下任何想要的。 :)撤回我的。 +1 – 2010-01-09 17:51:45
@Pekka很好,谢谢:)起初我以为源码不得不被编辑,但他们的快捷系统实际上非常酷。 – 2010-01-09 17:55:27