Vanilla JavaScript:禁用整个网站中的所有关键组合
Posted
技术标签:
【中文标题】Vanilla JavaScript:禁用整个网站中的所有关键组合【英文标题】:Vanilla JavaScript: Disable all key combos whatsoever in an entire website 【发布时间】:2019-03-26 11:50:38 【问题描述】:有时当您使用网站时,它们包含一个或多个键盘组合或(“键盘快捷键”),例如 Alt+Shift+S 或 CTRL+Shift+D从某种角度来看,是该网站(或该网站中的一个或多个网页)所独有的。
一个很好的广泛示例是当您在 Wikipedia 中的 edit-page of a random user-page 中时获得的不同组合键(将鼠标放在一个选项上通常会显示描述其组合键的链接描述)。
可能的问题
有时,网站的一组组合键可能会与给定操作系统的组合键发生冲突(如果组合键用于罕见错误,甚至会导致编辑错误)。
我的问题
是否有一种“暴力”(和普通的)javascript 方式来禁用整个网站中的所有预先存在的组合键?不仅仅是一两个预先存在的(特定)键组合,而是所有组合键,一次完成?
也许某种for
循环可以做到这一点?
我可以在诸如 Greasemonkey 或 Tampermonkey 之类的浏览器脚本执行器中运行此代码。
我为什么要问这个问题:
在我个人提出的this question 和this question 中找到“令人满意”的答案后,我提出了这个问题,其中包含我迄今为止尝试过的各种代码。
重要提示:
一般来说,我不认为任何人都应该这样做(也不要强加于其他人),因为它减少了 Web Accessibility 的网络应用程序;我描述的问题很少见,涉及我的个人问题。
【问题讨论】:
我不知道,但我给了你一个好评,因为你把这个问题写得这么好。 我也是这样做的。你很少看到写得很好的问题,绝对值得支持 【参考方案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);
这将阻止所有听众观看任何按键。如果这太宽泛了,您可以添加一些逻辑来仅在持有修饰键时才停止传播,例如
if (e.ctrlKey)
e.stopPropagation();
编辑:
上面的代码在我用于测试的页面上有效,但在您的***讨论页上无效,因为 wiki 页面实际上并没有使用事件侦听器,而是使用了 accesskey 属性。在这种情况下,删除属性将删除键盘快捷键:
document.querySelectorAll("[accesskey]").forEach(function(el)
el.removeAttribute('accesskey');
);
【讨论】:
哇!我以前在 JavaScript 中从未听说过这个概念。我认为它与 Web Accessibility 有关,并且可能是一个新概念。我会尝试阅读它。亲爱的丹,我非常感谢你的帮助!!!以上是关于Vanilla JavaScript:禁用整个网站中的所有关键组合的主要内容,如果未能解决你的问题,请参考以下文章
从 jQuery 或 vanilla javascript 事件触发合成 ExtJS 事件
javascript 使用vanilla JavaScript爬上DOM树
javascript 我的vanilla JavaScript插件的入门模板。
javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API
javascript 使用Vanilla JavaScript Shopify GraphQL Storefront API