我使用启用了触摸手势的 Wacom 手写板。出于某种原因,使用 Firefox 时,左右滚动被解释为左右箭头按键。
这会给一些网站带来严重破坏,比如 DuckDuckGo 和 Google 图片,因为如果你试图滚动浏览页面,任何完美垂直滚动移动突然开始改变标签或选择东西(DuckDuckGo 有键盘导航,所以如果你按左箭头或右箭头,它会在网页搜索、图像搜索、购物和地图之间切换)。
我意识到我可以使用不同的浏览器(不、从不、冷、死手等),或者关闭触摸手势,但对于大多数网站来说这没问题,而且触摸滚动很棒。
因此,我尝试使用 Tampermonkey 将其关闭,但我对 JavaScript/DOM 的了解太有限了。我发现,如果我在开发人员工具中编辑其中一个页面的源代码并添加此脚本,它就会成功捕获击键事件并停止不良行为:
window.addEventListener('keydown', (event) => {
if (event.code === 'ArrowRight' || event.code === 'ArrowLeft') {}
});
我尝试将它添加到用户脚本中,但没有成功,我也尝试在用户脚本中使用它
window.onkeydown = function(event) {
if (event.code === 'ArrowRight'||event.code === 'ArrowLeft'){
console.log('ohai');
event.preventDefault();
event.stopPropagation();
return false;
}
};
发生了这种console.log()
情况,但是 keydown 事件仍然会转到在 DuckDuckGo 中执行制表符的脚本。
如何在用户脚本中阻止左右箭头键击?
答案1
我还没有能够从 Mozilla 找到此问题的内置方法,因此使用 Autohotkey(@Mikhail-V 建议的)似乎是解决方法。
我编写了一个 AHK 脚本,将左右箭头按下事件转换为左右滚轮事件。现在的问题是,这会禁用左右箭头键,因此我添加了一个检查来查看 scrollLock 是否已打开。如果已打开,则左右箭头将转换为 mouseLeft 和 mouseRight,否则将转换为左右键按下事件。
#if winActive("ahk_class MozillaWindowClass") and GetKeyState("ScrollLock", "T")
#MaxHotkeysPerInterval, 200 ;the tablet sends a LOT of keypresses
Left::WheelLeft
Right::WheelRight