在 Firefox 中,如何防止页面通过 Javascript 逐个键覆盖 Firefox 内置键盘快捷键?最好也逐个站点覆盖?最令人沮丧的覆盖是链接到“在页面中查找”的正斜杠 ('/')。Google 搜索结果、Twitter 时间线、一些 wiki 和其他页面等网站窃取了斜杠键用于自己的搜索框,这是完全错误的。
由于我的代表允许我询问、编辑和回答问题,但不允许添加评论,因此这基本上是这两个未得到正确回答的问题的重复:
答案1
从 Firefox 58 开始,可以禁用每个网站的键盘快捷键覆盖。
“覆盖键盘快捷键”和许多其他权限可在“页面信息 -> 权限”(URL 栏中的信息图标下)中找到。
答案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;
});