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


39

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

由于我的代表可以提问,编辑和回答问题,但不能添加评论,因此,这基本上是未正确回答的其他两个问题的重复:

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

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


1
我对覆盖覆盖ctrl- <左箭头>的PHPMyAdmin感到沮丧...这是一个很好的问题
高度不规则的

1
我无法忍受覆盖默认行为的网站。也可以通过点击鼠标中键来完成。有关此问题的解决方案,请参见此相关问题。
杰克逊

Answers:


12

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

使用滑脂猴子安装。

// ==UserScript==
// @name           Disable keyboard shortcuts
// @description    Stop websites from highjacking 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;
});

2
真棒!对于元键,也几乎是完整的解决方案-我试图阻止Google Docs拦截上一个标签(Cmd + Left)和下一个标签(Cmd + Right),发现我还需要将useCapture设置为true;即,document.addEventListener('keydown',yourHandlerFn,true)
2014年

1
请注意,191就我的azerty设置而言,该值取决于您的键盘布局(我的alpha区域为16 + 58,数字键盘为111)
sylvainulg

2
不幸的是,如今不再工作了(已在pharicator和twitter上进行了测试)。自定义侦听器已触发,但网站的事件仍被触发,并且“页面搜索”未显示。
sylvainulg

1
@sylvainulg我看到它在Twitter上不起作用,但至少它在GitHub上仍然起作用。我不知道发生了什么变化。
宾基

除了php.net,这在我尝试过的所有地方都有效。我想知道他们正在使用什么事件。
qwazix

8

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

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

如描述所言,它“阻止google将搜索输入集中在每次按键上”-尤其是,如果您/将键盘焦点放在搜索框之外进行按下,则会出现“快速查找”,就像在其他网站上一样。

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


需要说明的是:此用户脚本会在启用该功能的页面上停止所有键盘快捷键,以保留浏览器自身的功能。要将其应用于其他网站,只需添加更多@include标记。
MikeFHay

如果没有有关链接背后隐藏的内容的任何信息,不幸的是,当userscripts-mirror.org掉线,被防火墙阻止或其他任何原因时,答案是无用的。
sylvainulg

7

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

“页面信息->权限”(位于URL栏的信息图标下方)中提供了“替代键盘快捷键”和许多其他权限。

superuser.com的Firefox权限示例

在Firefox中引入了键盘替代功能#380637


是的,经过11年的努力,他们终于完成了这张票的修理工作。不幸的是,当前的实现(仍在FF 59中)完全禁用了BackspaceDelete键,这确实很糟糕。
Lambart '18

6
而且,不幸的是它不会阻止网页从捕捉非移位(即无CtrlShiftAlt键)输入-这意味着这并不在原来的问题中提到的斜杠键在所有帮助。
兰巴特'18

@Lambart-很高兴知道,我最终也没有使用此功能,因为Firefox键盘快捷键已在jira和confluence中固定(在Firefox 59左右)
Alec Istomin

2
什么是固定的?JIRA和Confluence都仍然抓住各种密钥,这些密钥不断破坏我的工作流程。我认为这是Atlassian的问题:他们需要允许人们禁用(和/或更改)其“快捷方式”。
Lambart

firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592为我修复了Atlassian产品(可能在同一时间范围内进行了Atlassian修复)
Alec Istomin

0

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

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;
});

抱歉-但我无法解决这个问题。特别是我想禁用网站上左右箭头键-但是使用此脚本,箭头键仍然可以控制网站???
克里斯蒂安·赫伦茨

-3

YesScript插件对我而言是无忧的解决方案。它阻止站点运行JavaScript,但仅运行您选择的站点。大多数情况下,这些网站通过JavaScript劫持键盘快捷键。我在Ghacks.net的这篇文章中找到了它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.