Vanilla JavaScript:禁用整个网站中的所有按键组合

时间:2018-10-22 11:54:55

标签: javascript jquery html loops keyboard

有时,当您使用网站时,它们包含一个或多个键盘组合或(“键盘快捷键”),如 Alt + Shift + S CTRL + Shift + D 从某种角度看,该网站(或该网站中的一个或多个网页)是唯一的。

一个很好的广泛示例是当您进入Wikipedia中的edit-page of a random user-page时获得的不同组合键(将鼠标置于一个选项上通常会显示链接的描述,描述其组合键)。

可能的问题

有时网站的一组键组合可能与给定操作系统的键组合冲突(或者,如果使用组合的情况很少发生,甚至会导致编辑错误)。

我的问题

是否存在一种“暴力”(和恶意的)JavaScript方式来禁用整个网站中的所有现有的键组合?一次就不仅仅是一个或两个(特定的)键组合,而是所有的键组合?

也许可以通过某种for循环来做到这一点?

我可以在某些浏览器脚本执行器(例如Greasemonkey或Tampermonkey)中运行此代码。

为什么我问这个问题:

在我亲自问过的this questionthis question中找到“令人满意的”答案之后,我提出了这个问题,其中包含了到目前为止我尝试过的所有代码。

重要提示:

通常来说,我认为任何人都不应这样做(并且不要强迫他人这样做),因为它通常会减少Web Accessibility个Web应用程序;我描述的问题很少见,并且可以解决我遇到的个人问题。

1 个答案:

答案 0 :(得分:1)

我想我会尝试用the method described here阻止事件监听器。

window.addEventListener("keydown",  function (e) { e.stopPropagation(); }, true);
window.addEventListener("keyup",    function (e) { e.stopPropagation(); }, true);
window.addEventListener("keypress", function (e) { e.stopPropagation(); }, true);

这将停止所有收听者观看任何按键。如果范围太广,则可以仅在按住修改键的情况下向stopPropagation添加一些逻辑,例如

if (e.ctrlKey) {
  e.stopPropagation();
}

编辑:

上面的代码在我用于测试的页面上有效,但在您的Wikipedia对话页面上无效,因为Wiki页面实际上并未使用事件监听器,而是使用accesskey属性。在这种情况下,删除属性将删除键盘快捷键:

document.querySelectorAll("[accesskey]").forEach(function(el) {
  el.removeAttribute('accesskey');
});