![如何禁止 Firefox 中的网站窃取键盘快捷键](https://linux22.com/image/1245461/%E5%A6%82%E4%BD%95%E7%A6%81%E6%AD%A2%20Firefox%20%E4%B8%AD%E7%9A%84%E7%BD%91%E7%AB%99%E7%AA%83%E5%8F%96%E9%94%AE%E7%9B%98%E5%BF%AB%E6%8D%B7%E9%94%AE.png)
许多网站,尤其是涉及富文本编辑的所有网站(这个网站也犯了错误),窃取了通常用于控制 Firefox 的键盘快捷键,并让它们执行其他操作。当我按下 Cmd-number、Cmd-L、Cmd-T 或 Cmd-K 等快捷键时,它却没有执行我想要的操作,这真是太令人恼火了。我能阻止它吗?
实际上,如果我可以禁止窃取所有 Cmd-* 快捷键,那可能最好不过了。我从未见过它们有任何用处。这可能吗?
答案1
感谢 Greasemonkey 的新@run-at
属性,现在这成为可能了!
我从中汲取灵感这个脚本和这个脚本将它们组合成一个成功拦截键盘快捷键Ctrl+T和Ctrl+的用户脚本S。我在 Firefox 17 ESR 和 Firefox 25 中进行了测试。
// ==UserScript==
// @name Disable Ctrl+s and Ctrl+t interceptions
// @description Stop websites from highjacking keyboard shortcuts
//
// @run-at document-start
// @include *
// @grant none
// ==/UserScript==
// Keycode for 's' and 't'. Add more to disable other ctrl+X interceptions
keycodes = [83, 84];
(window.opera ? document.body : document).addEventListener('keydown', function(e) {
// alert(e.keyCode ); //uncomment to find more keyCodes
if (keycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) {
e.cancelBubble = true;
e.stopImmediatePropagation();
// alert("Gotcha!"); //ucomment to check if it's seeing the combo
}
return false;
}, !window.opera);
答案2
在该漏洞被提交 11 年后,Mozilla 终于开始着手处理这个受欢迎的功能请求,现在看来运行正常(在 Firefox 66.0.3/Ubuntu 中测试)。
(感谢@PerJohansson 指出自 FF 59 以来他们使得设置变得更加难以找到。)
我刚刚用一些更简单的步骤更新了这个答案,并使用 Firefox 75 进行了测试。
请注意,如果你想禁用全部默认站点,导航到
about:config
,并将 的值设置permissions.default.shortcuts
为 2。感谢@inetknght 提供的提示,该提示也记录在这里:https://support.mozilla.org/en-US/questions/1241294#answer-1175070
要根据每个站点禁用快捷方式,您可以在下面找到每个步骤的屏幕截图。
- 按 Ctrl-I(如果可以)显示页面信息窗口;或者右键单击网页上的空白部分,然后
View Page Info
从上下文菜单中选择。 - 选择选项
Permissions
卡 - 调整
Override Keyboard Shortcuts
设置。
以下是每个步骤的一些最新(2020 年 4 月)屏幕截图。
- 如果您使用鼠标打开页面信息窗口:
- 选择选项
Permissions
卡:
- 适当调整权限:
Mozilla 在Page Info
这里有更多关于该窗口的信息:
https://support.mozilla.org/en-US/kb/firefox-page-info-window
如果你对这次修复的历史记录感兴趣,以下是相关的 Mozilla 票证: https://bugzilla.mozilla.org/show_bug.cgi?id=380637和 https://bugzilla.mozilla.org/show_bug.cgi?id=1445942
答案3
大量研究表明,从当前版本的 Firefox (3.6.x) 开始,这是不可能的 - 所有键绑定冲突都通过优先级解决:系统 > 网站 > Firefox - 这是一个相当愚蠢的顺序。我尝试过的所有插件似乎都无法解决这个问题。
也许在未来的版本中它会变得可行,但现在的答案是——不可能。
答案4
问题在于,任何页面都可以运行设置事件处理程序来抓取按键事件的 Javascript,而 Firefox 的 Javascript 控件不够细粒度,无法在不破坏其他 Javascript 功能的情况下阻止它。
防止这种情况的唯一方法是禁用 Javascript(工具 -> 选项,[内容] 选项卡,取消选中启用 JavaScript)或者,您可以使用 NoScript 之类的扩展程序在每个站点上禁用 Javascript。
Firefox 可让您预防肯定Javascript 的使用,例如移动/调整窗口大小、更改或禁用上下文菜单等;但没有什么可以阻止网站拦截键盘事件。
也许有扩展可以提供这种级别的控制 - 我不知道。JavaScript 选项,但该扩展不再更新。