Javascript Firefox能检测到元密钥吗?

Javascript Firefox能检测到元密钥吗?,javascript,firefox,firefox-addon,Javascript,Firefox,Firefox Addon,我正在开发一个Firefox扩展,正在努力使用meta键(键盘上的Windows键)KeyboardEvent.metaKey应该检测到它,但总是返回false。(您可以尝试一下,甚至更简单。) 我可以用KDE16.08/Gentoo上的Firefox48.0和Windows10上的Firefox47.0.1重现这一点。我还尝试了Ctrl、Shift和Alt的所有组合,但没有注册为meta Chrome53.0没有这个问题,顺便说一句。否,是: 是的,Firefox可以检测Windows密钥,但

我正在开发一个Firefox扩展,正在努力使用meta键(键盘上的Windows键)
KeyboardEvent.metaKey
应该检测到它,但总是返回false。(您可以尝试一下,甚至更简单。)

我可以用KDE16.08/Gentoo上的Firefox48.0和Windows10上的Firefox47.0.1重现这一点。我还尝试了Ctrl、Shift和Alt的所有组合,但没有注册为meta


Chrome53.0没有这个问题,顺便说一句。

否,是:
是的,Firefox可以检测Windows密钥,但不能检测为“元”密钥。该键同时触发
keyup
keydown
事件,但不会触发
keypress
事件。Chrome也同样触发事件(无
按键
)。在Chrome和Firefox中,<代码>键代码相同,但是他们认为密钥是两个不同的。Chrome将该键视为“Meta”键,而Firefox将其视为“OS”键。因此,Firefox没有将
metaKey
属性设置为
true
,因为从Firefox的角度来看,“Meta”键没有被按下

Firefox目前对Windows键(可能还有Mac命令,但我还没有测试)的解释与网站上的文档相反。要么Firefox代码需要更改,要么文档需要更改。文件至少应说明当前情况。如果不解释为什么这种行为目前是这样的话,我会认为它是Firefox中的一个bug。同时,我更新了MDN上的页面,并注意到Windows键确实会导致
metaKey
为true(您可能需要按Ctrl-F5刷新页面)

在与源代码(,)协调时,我注意到在源代码中添加了额外的修改器代码,包括
modifier\u OS
,以指示Windows键与“Meta”键分开。我没有调查这一变化到底是什么时候发生的

如果您想知道在您正在处理的事件发生时按下了Windows键,则必须使用
keydown
keydup
上的处理程序来监视和跟踪Windows键的当前状态

典型Windows事件(
keydown
完整显示):

以下是在监视
keydown
keypress
输入和
keypup
事件时按下并释放Windows键后的控制台日志

适用于Windows-z的Firefox典型事件:

适用于Windows-z的Chrome典型事件:

使用Windows键作为修改器:
正如您在上面的屏幕截图中所看到的,您在Firefox或Chrome中都没有获得Windows-z的完整事件序列。与其他按键组合相比,这两个组合都缺少z的
keydown
事件。我不清楚那个事件为什么没有被触发。我怀疑它被窗户吞没了

使用Windows密钥将有问题。Windows会对许多按键组合做出反应,包括用户未按要求小心执行的轻微按键错误。您最好使用不同的修改器关键点,或不包括Windows关键点的修改器关键点组合

另一个例子:在Firefox中,Alt-Windows-z导致3个
keydown
事件、一个
keypress
事件和3个
keypup
事件的完整序列,而在Chrome中,该序列不会触发
keypress
事件

一般键盘快捷键:
已分配给不同任务的组合键因操作系统、浏览器和用户而异。通常,如果要在通常要发布的加载项中使用键盘快捷键,最好的做法是使用默认的键盘快捷键,但允许用户选择定义每个操作要使用的快捷键,或者即使该操作有快捷键。实际情况是,用户将与其他应用程序和浏览器扩展发生冲突。根据您正在编写的分机类型,此时可以更改或不更改键盘快捷键。

简短回答否

请注意,windows上的元键只是windows键

在撰写本文时,Firefox 55已经发布,但它仍然无法通过在
metaKey
属性中返回
false
来检测按钮是否被按下。 因为一场战争


我认为最好使用shiftKey,它在事件对象上具有相同名称的属性。

在Microsoft Edge中似乎也被忽略。然而,即使你能让它以跨浏览器的方式工作,我也不确定依赖它是否会带来良好的用户体验,至少在Windows中是这样。不管怎样,操作系统将捕获按键,并且每次组合发生时都会出现“开始”菜单。Windows的优点是,我没有想到这一点。我的FF替代品是Alt,但它在Chrome中不起作用(我甚至没有获得该特定按键组合的事件)。所以Windows上的Chrome仍然没有解决。你可以在Chrome中的
keydown
keyup
事件处理程序中捕获
Event.altKey
。我说得太糟糕了。由于我不知道的原因,许多关键事件甚至没有出现在我编写的扩展中——我猜是我正在扩展的页面,还是浏览器吞噬了它们。在Chrome中,我想要的(Alt+Shift+N)就是其中之一,所以我甚至没有达到我必须摆弄
keydown
keydup
的程度。虽然现在我想了想,但可能值得检查一下这些阶段是否会看到更多事件……请指定您正在处理的Firefox插件的类型:()、()、()或()?请在问题中添加相应的标签