如何防止浏览器覆盖我的 ace 编辑器的 keyBindings?

How to prevent the browser to override my keyBindings of ace editor?

这个问题是在我实现了 ace 编辑器之后出现的...

这里是link:

我有 ace 编辑器,感谢 for 循环:

for (key in editor.keyBinding.$defaultHandler.commandKeyBinding) {
            if (key !== "ctrl-d")
                delete editor.keyBinding.$defaultHandler.commandKeyBinding[key];
        }

我有自己的keyBindings,ace编辑器也有自己的,我删除了,除了一个,那个是CTRL+D删除一行...

但是,我的浏览器已经在书签上添加了 ctrl-d 内容,我现在需要阻止它,有什么想法吗?

我在 ace-editor 中测试过,默认功能似乎会自行阻止默认键盘快捷键。但是为了回答您的问题,您可以使用 ctrl + dcommand + d 的事件侦听器而不是 e.preventDefault()e.stopPropagation()... 现在您将如何使用它使用 ace 编辑器:

document.addEventListener("keydown", function(e) {
    if (e.key.toLowerCase() == "d" && (navigator.platform.match("Mac") ? e.metaKey : e.ctrlKey)) {
        editor.execCommand("removeline");
        e.preventDefault();
        e.stopPropagation();
    }
}, false);
  • 注意我是如何使用 e.key.toLowerCase() == "d" 而不是 e.keyCode == 68 的……这是因为 KeyboardEvent.keyCode is now marked as deprecated so I used KeyboardEvent.key 而不是。使用 .toLowerCase() 因此即使切换 Caps Lock 时快捷方式也能正常工作。
  • 使用 e.key 而不是 e.keyCode 的一个缺点是 e.key 仅适用于 English/Latin 键盘输入,因此键必须是 "d"而 e.keyCode 将使用其他语言输入,例如阿拉伯语 (ctrl + ي)...所以您决定使用哪一个。

如果您已经删除了所需命令的默认值 binding/command ,您可以像这样添加它而无需其键绑定:

editor.commands.addCommand({
    name: "removeline",
    exec: function(editor) { editor.removeLines(); },
    scrollIntoView: "cursor",
    multiSelectAction: "forEachLine"
});
  • 此命令的存在是必要的,因此 editor.execCommand("removeline") 将起作用