我必须将 Firefox 与 Web 应用程序一起使用,该应用程序使用类似 Emacs 的击键,包括
ctrl-w
来剪切文本。我的 Emacs 肌肉记忆经常让我不假思索地点击 ctrl-w
,然后我的 Firefox 选项卡突然消失,因为 ctrl-w
是 Firefox 关闭选项卡的快捷方式。这太令人抓狂了。不幸的是,这种情况发生在我没有管理员权限的网络上,甚至无法获得在没有神圣干预的情况下从外部安装任何软件的权限。我在 about:config
中没有找到可以阻止此问题的 Firefox 设置——我用 google 搜索了又搜索,但没有任何效果。
但我突然想到,我可以编写一个小的 Firefox 扩展,在 Firefox 正确获取击键之前拦截它们,然后将它们转发到应用程序。这可能吗?我成功地完成了这篇post。然后我尝试写一个击键的事件监听器,如下
onCommand
,如下,
document.addEventListener("keydown", function(event) {
console.log("Keydown:", event);
});
window.addEventListener("load", (event) => {
console.log("page is fully loaded");
document.addEventListener('keydown', function(e) {
console.log('document keydown event');
console.log('key:', e.key);
console.log('ctrl:', e.getModifierState('Control'));
}, false);
});
window.addEventListener('keydown', function(e) {
console.log('keydown event');
console.log('key:', e.key);
console.log('ctrl:', e.getModifierState('Control'));
}, false);
load
事件显示在控制台上,但没有其他内容。我错过了什么?
事实证明,
ctrl-w
是一个保留键,这给我上面提出的解决方案带来了问题。在 Firefox 的地址字段中,输入
view-source:chrome://browser/content/browser.xhtml
这显示了 Firefox 的设置列表。在第 289 行或附近,你会看到
<key id="key_close"
data-l10n-id="close-shortcut"
command="cmd_close"
modifiers="accel"
reserved="true"/>
cmd_close
是关闭当前选项卡的命令。现在去
view-source:resource:///localization/en-US/browser/browserSets.ftl
您将找到
ctrl-w
的按键绑定:
close-shortcut =
.key = W
Firefox 安装中有一个 zip 文件
omni.ja
,其中存储了这些设置,但如果没有管理员权限,则无法更改它们。 (请参阅here了解进行此更改的补丁。)用户cor-el提供的一种不太激烈的方法是将两个JavaScript文件添加到Firefox安装中,这将完成相同的事情。不幸的是,这也需要管理员权限。
此时我想起可以将 Firefox 安装到用户帐户,而无需管理员权限。经过一段时间的探索,我找到了一个 Firefox 安装程序。我安装了它,将 cor-el 中的 JavaScript 放入其中,然后 voila,不再有 ctrl-w
的问题。