如何禁止 Firefox 中的网站窃取键盘快捷键

taw*_*taw 68 firefox keyboard-shortcuts website

许多网站,尤其是所有涉及富文本编辑的网站(这个网站也有罪),窃取了通常用于控制 Firefox 的键盘快捷键,并让它们做其他事情。当我按下 Cmd-number、Cmd-L、Cmd-T 或 Cmd-K 之类的东西时,它完全令人气愤,但它没有按我想要的那样做。我可以让它停止吗?

实际上,如果我可以禁止窃取所有 Cmd-* 快捷方式,那可能是最好的。我从未见过它们用于任何有用的事情。是否可以?

Mar*_*.H. 26

感谢 Greasemonkey 的新@run-at属性,这现在成为可能!

我从这个脚本这个脚本中获得灵感,将它们组合成一个成功拦截键盘快捷键Ctrl+TCtrl+ 的用户脚本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);
Run Code Online (Sandbox Code Playgroud)

  • 此代码有效!请记住,它不仅会过滤 Ctrl+Key,还会过滤 Ctrl+Alt+Key、Ctrl+Shift+Key 和 Ctrl+Alt+Shift+Key,因为它只检查 Ctrl 修饰符的状态。 (3认同)
  • 这非常有帮助。 OS X 用户应将“e.ctrlKey”替换为“e.cmdKey”和“e.cmdKey && e.shiftKey”,以回收大部分浏览器快捷方式。 (2认同)
  • @JamesGecko 通过 [this](http://stackoverflow.com/a/5500536/129269) 找到答案,您应该/可以使用 e.metaKey 作为命令键。 (2认同)

Lam*_*art 19

提交错误 11 年后,Mozilla 终于开始处理这个流行的功能请求,现在它似乎工作正常(在 Firefox 66.0.3/Ubuntu 中测试)。

(感谢@PerJohansson 指出自 FF 59 以来,他们使设置变得更加难以找到。)

我刚刚用一些更简单的步骤更新了这个答案,并在 Firefox 75 上进行了测试。

您可以在下面找到每个步骤的屏幕截图。

  1. 按 Ctrl-I(如果可以)显示页面信息窗口;或者右键单击网页上的空白部分,然后View Page Info从上下文菜单中进行选择。
  2. 选择Permissions选项卡
  3. 调整Override Keyboard Shortcuts设置。

以下是每个步骤的一些最近(2020 年 4 月)屏幕截图。

  1. 如果您使用鼠标打开页面信息窗口:

Firefox 上下文菜单

  1. 选择Permissions选项卡:

Firefox 页面信息窗口

  1. 适当调整权限:

Firefox 权限选项卡

Mozilla 在Page Info此处提供有关窗口的更多信息:

https://support.mozilla.org/en-US/kb/firefox-page-info-window

如果您对此修复的历史感兴趣,这里是相关的 Mozilla 票证:https : //bugzilla.mozilla.org/show_bug.cgi?id=380637https://bugzilla.mozilla.org/show_bug。 cgi?id=1445942

  • 什么是用于更改默认值的 `about:config` 选项?我想强制*所有*站点无法连接到我的键盘 (6认同)
  • @inetknght 用于更改默认值的“about:config”选项是“permissions.default.shortcuts”。将其设置为“2”以禁止网站覆盖任何快捷方式,除非通过“页面信息”手动允许。 (3认同)
  • 在 Firefox 64 中(不确定它出现在哪里),您必须单击“连接”=>“更多信息”才能访问此 idalog 框。权限齿轮进入首选项,而不是正确的位置。 (2认同)

taw*_*taw 5

广泛的研究表明,从当前版本的 Firefox (3.6.x) 开始,这是不可能的 - 所有键绑定冲突都通过优先级解决:系统 > 网站 > Firefox - 这是一个相当愚蠢的顺序。我尝试过的插件似乎都无法修复它。

可能它在未来的版本中变得可行,但现在的答案是 - 不可能。

  • 近 8 年后使用 FF 53.0,这仍然是一个问题。 (2认同)

DMA*_*361 5

由于问题似乎是 JavaScript 键盘事件窃取按键,是否无法构建一个 JavaScript 脚本(通过 Greasemonkey 使用)来解除这些所有键盘事件的绑定,从而将每个快捷方式的正确用法返回给浏览器?

我不确定这有多可行,但是具有更多 JavaScript / Greasemonkey 经验的人可能会提供帮助(可能值得询问 SO)。

  • 这通过 onKeyPress 机制起作用 - Firefox 首先将每个按键发送到网站,如果它没有被取消或拦截,则只在之后查看它。一些可以在网站之前拦截按键并以某种方式直接运行 Firefox 功能的 Greasemonkey 魔术可能是可能的,但这远非显而易见。 (2认同)