有时,当您使用网站时,它们包含一个或多个键盘组合或(“键盘快捷键”),如Alt Shift S或CTRL Shift D,某些视图,对于该网站(或该网站中的一个或多个网页)而言是唯一的.
一个很好的例子就是你在维基百科的edit-page of a random user-page中得到的不同的关键组合(用鼠标站在一个选项上通常会显示描述其关键组合的链接描述).
可能的问题
有时,网站的一组关键组合可能与给定操作系统的这些组合发生冲突(如果在罕见错误中使用组合,甚至会导致编辑错误).
我的问题
是否存在“暴力”(和vanillic)JavaScript方法来禁用整个网站中的所有预先存在的keycombos?不只是一个或两个预先存在的(特定)关键组合,而是所有这些组合,一气呵成?
也许某种for循环可以做到这一点?
我可以在一些浏览器脚本执行器中运行此代码,如Greasemonkey或Tampermonkey.
为什么我问这个问题:
在我个人问过的this question和this 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');
});