自 Firefox 57 (Quantum) 更新以来,所有允许更改 Firefox 中的键绑定的附加组件似乎都已停止工作/不受支持。
有没有方法可以更改 Firefox Quantum 中的默认键绑定?
答案1
有一种方法。它不是超级官方的,但基本上你可以解压browser/omni.ja
,编辑其中的键绑定chrome/browser/content/browser/browser.xul
,重新打包,删除启动缓存,它就可以工作了。
或者,如果您认为解包和重新打包比构建更具黑客攻击性,那么您可以编译自己的 Firefox,这样您就不需要解包二进制文件了。
构建的另一个优点是,你可以将修改存储在 git 中的官方源之上,并始终进行变基,就像我在这里所做的那样:https://github.com/errge/gecko-dev/tree/gregzilla-patched-20181223
我建议您首先从二进制选项开始,因为 20 分钟后您就能使用可用的键盘快捷键,而不只是刚开始执行 mercurial 克隆程序 :)
这两种方法都独立于任何扩展/Web 扩展,并且始终有效,即使在位置栏中,甚至在受保护的页面上也是如此(正如您在评论中询问的那样)。因此,它们比重新映射 Web 扩展效果更好。
我写了一篇文章,其中包含您可能感兴趣的所有细节:https://github.com/nilcons/firefox-hacks
如果您有更多问题,请在 github 上报告问题。
答案2
您可以使用以下方式更改 Firefox 中的按键绑定自动配置,而无需解压和修改 Firefox 二进制文件。
创建一个config-prefs.js
和config.js
文件:
在 Windows 上:
C:\Program Files\Mozilla Firefox\defaults\pref\config-prefs.js
C:\Program Files\Mozilla Firefox\defaults\pref\config.js
在 macOS 上:
Firefox.app\Contents\Resources\config.js
Firefox.app\Contents\Resources\defaults\pref\config-prefs.js
在 Linux 上:
/usr/lib/firefox/config.js
/usr/lib/firefox/browser/defaults/preferences/config-prefs.js
内容如下:
config-prefs.js
:
pref("general.config.filename", "config.js");
pref("general.config.obscure_value", 0);
pref("general.config.sandbox_enabled", false);
config.js
:
try {
let { classes: Cc, interfaces: Ci, manager: Cm } = Components;
const Services = globalThis.Services;
const {SessionStore} = Components.utils.import('resource:///modules/sessionstore/SessionStore.jsm');
function ConfigJS() { Services.obs.addObserver(this, 'chrome-document-global-created', false); }
ConfigJS.prototype = {
observe: function (aSubject) { aSubject.addEventListener('DOMContentLoaded', this, {once: true}); },
handleEvent: function (aEvent) {
let document = aEvent.originalTarget; let window = document.defaultView; let location = window.location;
if (/^(chrome:(?!\/\/(global\/content\/commonDialog|browser\/content\/webext-panels)\.x?html)|about:(?!blank))/i.test(location.href)) {
if (window._gBrowser) {
// Place your keyboard shortcut changes here
// ...
// ...
}
}
}
};
if (!Services.appinfo.inSafeMode) { new ConfigJS(); }
} catch(ex) {};
修改这些文件后,您始终必须转到about:support
并运行Clear startup cache
,以使用新配置重新启动浏览器。
以下是您可以执行的操作的一些示例:
将这些片段放入config.js
我写的 中Place your keyboard shortcut changes here
。
删除现有的键盘快捷键
// remove Ctrl-Shift-X, so that I can map it to 1Password in the 1Password app later
let keySwitchDirection = window.document.getElementById('key_switchTextDirection');
keySwitchDirection.remove();
更改现有的键盘快捷键
// remap Ctrl-J to downloads (removing it from focusing the browser bar)
let search2 = window.document.getElementById('key_search2')
search2.remove();
let openDownloads = window.document.getElementById('key_openDownloads')
openDownloads.setAttribute("modifiers", "accel");
openDownloads.setAttribute("key", "J");
创建新的键盘快捷键
// create keyboard shortcut to Toolbar > Settings with Ctrl-,
let settingsKey = window.document.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'key');
settingsKey.setAttribute("id", "key_Settings");
settingsKey.setAttribute("modifiers", "accel,shift");
settingsKey.setAttribute("key", "U");
settingsKey.setAttribute("oncommand", "openPreferences()");
settingsKey.addEventListener('command', this, false);
mainKeyset.appendChild(settingsKey);
完全定制的东西。(Firefox 引入了 Shift-Ctrl-T 作为通用撤消操作(变更集),因此这里的示例不再必要。我将它留在这里作为其他自定义的示例。)
// make Ctrl-Shift-T reopen last tab OR last window, depending on which one was closed last
let undoCloseTabKey = window.document.getElementById('key_undoCloseTab');
undoCloseTabKey.removeAttribute('command');
undoCloseTabKey.setAttribute('oncommand', 'undoCloseLastClosedTabOrWindow()');
undoCloseTabKey.addEventListener('command', this, false);
window.undoCloseLastClosedTabOrWindow = function() {
// don't have any tabs to restore
if (SessionStore.getClosedTabCount(window) == 0) {
// we don't need to worry whether there are any windows to restore - undoCloseWindow does that for us
window.undoCloseWindow();
}
// don't have any windows to restore
else if (SessionStore.getClosedWindowCount() == 0) {
// we don't need to worry whether there are any tabs to restore - undoCloseTab does that for us
window.undoCloseTab();
}
// restore whichever was closed more recently
else if (SessionStore.getClosedTabData(window)[0].closedAt > SessionStore.getClosedWindowData()[0].closedAt) {
window.undoCloseTab();
} else {
window.undoCloseWindow();
}
}
指示:
要查找现有的键盘快捷键:
- 汉堡菜单 > 更多工具 > 浏览器工具箱
- 在检查器中,搜索
#mainKeyset
- 在那里,你可以看到所有指定的键盘快捷键
查找可通过键盘快捷键触发的菜单操作
- 汉堡菜单 > 更多工具 > 浏览器工具箱
- 使用检查器找到要通过键盘快捷键触发的元素,例如
appMenu-settings-button
oncommand
从菜单项中获取属性,并将其用作oncommand
关键标签的属性
或者
- 使用检查器,搜索
#mainCommandSet
- 并获取命令的
id
,并将其用作键标签的command
(非)属性。oncommand
定义键盘快捷键:
- 使用属性指定修饰符
modifiers
。您可以使用accel
(表示 Ctrl)shift
和alt
key
使用属性指定键本身
所有这些的来源:Reddit,u/aveyo,通过设置 config.js 恢复 Ctrl+Shift+B = 库
更多细节:Firefox 键盘快捷键(网络存档)
答案3
如果您使用 macOS,您可以自定义任何应用程序的快捷方式,只要它们出现在应用程序菜单中即可。macOS 13+ 的说明
在 Mac 上,选择 菜单 >系统设置, 点击键盘 (您可能需要向下滚动),然后点击键盘快捷键在右侧。
选择应用程序快捷方式在左侧,单击添加按钮,单击应用弹出菜单,然后选择特定应用或所有应用程序。
在里面菜单标题字段中,键入要创建快捷方式的菜单命令,与应用程序中显示的命令完全相同
更多详细信息请参阅 Apple 网站:https://support.apple.com/guide/mac-help/create-keyboard-shortcuts-for-apps-mchlp2271/mac
答案4
我不确定你想要什么样的快捷方式,但有一个很棒的扩展叫做维美拉让您可以完全不使用鼠标进行浏览。此扩展提供了一种过滤机制,让您可以决定键绑定应在哪些网站上起作用。
它仍处于实验阶段,因为它是从 Chrome 扩展程序移植的,但我在使用它时确实遇到了任何错误或问题。
绑定遵循 VIM 绑定,如果您已经熟悉这些绑定,那么绑定应该是自然的,否则,您可以根据自己的喜好对它们进行定制。