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

有时,当您使用网站时,它们包含一个或多个键盘组合或(“键盘快捷键”),如Alt Shift S或CTRL Shift D,某些视图,对于该网站(或该网站中的一个或多个网页)而言是唯一的.

一个很好的例子就是你在维基百科的edit-page of a random user-page中得到的不同的关键组合(用鼠标站在一个选项上通常会显示描述其关键组合的链接描述).

可能的问题

有时,网站的一组关键组合可能与给定操作系统的这些组合发生冲突(如果在罕见错误中使用组合,甚至会导致编辑错误).

我的问题

是否存在“暴力”(和vanillic)JavaScript方法来禁用整个网站中的所有预先存在的keycombos?不只是一个或两个预先存在的(特定)关键组合,而是所有这些组合,一气呵成?

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

我可以在一些浏览器脚本执行器中运行此代码,如Greasemonkey或Tampermonkey.

为什么我问这个问题:

在我个人问过的this questionthis question中找到“满意”答案之后我问了这个问题,并且包含了我迄今为止尝试过的各种代码.

重要的提示:

一般来说,我认为没有人应该这样做(并且不会强迫别人使用),因为它会减少Web Accessibility的Web应用程序;我描述的问题是罕见的,处理我的个人问题.

最佳答案 我想我会尝试在
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);

这将阻止所有听众观看任何按键操作.如果它太宽泛,你可以添加一些逻辑,只有在保持修改键的情况下才停止传播,例如

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

编辑:

上面的代码适用于我用于测试但不在维基百科谈话页面上的页面,因为维基页面实际上并不使用事件监听器,而是使用accesskey属性.在这种情况下,删除该属性将删除键盘快捷键:

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