如何防止我访问的页面覆盖选定的 Firefox 快捷键?

如何防止我访问的页面覆盖选定的 Firefox 快捷键?

在 Firefox 中,如何防止页面通过 Javascript 逐个键覆盖 Firefox 内置键盘快捷键?最好也逐个站点覆盖?最令人沮丧的覆盖是链接到“在页面中查找”的正斜杠 ('/')。Google 搜索结果、Twitter 时间线、一些 wiki 和其他页面等网站窃取了斜杠键用于自己的搜索框,这是完全错误的。

由于我的代表允许我询问、编辑和回答问题,但不允许添加评论,因此这基本上是这两个未得到正确回答的问题的重复:

如何阻止网站覆盖我的键盘快捷键

Firefox:不允许网站覆盖 /(斜线)键

答案1

从 Firefox 58 开始,可以禁用每个网站的键盘快捷键覆盖。

“覆盖键盘快捷键”和许多其他权限可在“页面信息 -> 权限”(URL 栏中的信息图标下)中找到。

Firefox 针对 superuser.com 的权限示例

Firefox 中引入了键盘覆盖 #380637

答案2

基于 edymtt 的回答,我创建了一个用户脚本,它只禁用特定的键盘快捷键。您可以通过添加来添加更多要禁用的快捷键键码到 keycodes 数组,或者通过使用@include一个或多个模式替换标签来限制将其应用到哪些站点。

使用安装油脂猴

// ==UserScript==
// @name           Disable keyboard shortcuts
// @description    Stop websites from hijacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

keycodes = [191] // Keycode for '/', add more keycodes to disable other key captures

document.addEventListener('keydown', function(e) {
//    alert(e.keyCode); //uncomment to find out the keycode for any given key
    if (keycodes.indexOf(e.keyCode) != -1)
    {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
});

答案3

关于 Google 和快速查找快捷方式,您可以安装这个 Greasemonkey 脚本:

http://userscripts-mirror.org/scripts/show/132237

正如描述所说,它“阻止谷歌在每次按键时聚焦搜索输入” - 特别是,如果您/在键盘焦点位于搜索框之外的情况下按下,则会出现快速查找,就像在其他网站上一样。

我只是安装了它而没有接触代码,但我认为它可以很容易地适应其他网站和/或其他快捷方式。

答案4

这是一个更通用的脚本 - 您可以定义任意数量的按键事件来禁用。

https://greasyfork.org/en/scripts/5819-disable-website-keyboard-hooks

// ==UserScript==
// @name           Disable website keyboard hooks
// @description    Stop websites from hijacking keyboard shortcuts.
// @author         Isaac Levy
// @run-at         document-start
// @include        *
// @grant          none
// @version        0.0.1
// @namespace      https://isaacrlevy.com
// ==/UserScript==

var keycodes = [ // Add keycodes as desired, keep sorted.
    37, 38, 39, 40 // Arrow keys.
]

var meta_keycodes = [ // Disable these when meta key is pressed.
    70
];

// Don't change below this line.

var isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

// Create a fast lookup.
// This saves work during normal typing. Maybe unnecessary.
var keycode_offset = keycodes[0];
var keycode_arr = Array(keycodes[keycodes.length - 1] - keycode_offset)
for (var i = 0, len = keycodes.length; i < len; i++) {
    keycode_arr[keycodes[i] - keycode_offset] = true;
}

document.addEventListener('keydown', function(e) {
    //console.log(e);
    if ((isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
        if (meta_keycodes.indexOf(e.keyCode) >= 0) {
            e.stopImmediatePropagation();
        }
    } else if (keycode_arr[e.keyCode - keycode_offset]) {
        e.stopImmediatePropagation();
    }
    return false;
});

相关内容