代码之家  ›  专栏  ›  技术社区  ›  user9303970

普通javascript:禁用整个网站中的所有键组合

  •  4
  • user9303970  · 技术社区  · 6 年前

    有时,当你使用网站时,它们包含一个或多个键盘组合或(“键盘快捷键”)如 alt+shift+s CTRL+SHIFT+D组合键 根据某些视图,是该网站(或该网站中的一个或多个网页)独有的。

    一个很好的例子是当你在 edit-page of a random user-page 在维基百科中(鼠标放在一个选项上通常会显示描述其组合键的链接描述)。

    可能的问题

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

    我的问题

    有没有一种“暴力”(和香草)的javascript方法来禁用 所有先前存在的组合键 在整个网站上?不仅仅是一个或两个预先存在的(特定的)键组合,而是所有的键组合,一次性?

    也许是某种 for 会这样吗?

    我可以在像Greasemonkey或TamperMonkey这样的浏览器脚本执行器中运行这段代码。

    为什么我问这个问题:

    我问这个问题是在 this question this question 我亲自问过,里面有我试过的各种密码。

    重要提示:

    一般来说,我认为任何人都不应该这样做(也不应该把它强加于其他人),因为它会减少 Web Accessibility 一般的web应用程序;我所描述的问题是罕见的,并且涉及到我个人的问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dan Arnfield    6 年前

    我想我应该试着用 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();
    }
    

    编辑:

    上面的代码适用于我用于测试的页面,但不适用于您的wikipedia talk页面,因为wiki页面实际上并不使用事件侦听器,而是 accesskey 属性。在这种情况下,删除属性将删除键盘快捷键:

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