从浏览器选项卡中访问"媒体键"

jld*_*ont 21 javascript browser google-chrome

有没有办法在浏览器选项卡/窗口中使用Javascript访问"媒体键"?

我主要对谷歌Chrome解决方案感兴趣.

使用以下代码,似乎没有为媒体键生成事件:

<html>
<body onKeyDown="showKeyCode(event)">
    <script type="text/javascript">

        function showKeyCode(event) {
            alert(event.keyCode);
        }

    </script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?我可以使用Google Chrome扩展程序做得更好吗?

更新: 为了解决这个问题,我精心设计了以下工具:

tha*_*kis 17

从 Chrome 73 开始,明确支持媒体密钥,请参阅https://developers.google.com/web/updates/2019/02/chrome-73-media-updates

总之,您可以安装一个事件处理程序

navigator.mediaSession.setActionHandler('previoustrack', function() {
  // User hit "Previous Track" key.
});
Run Code Online (Sandbox Code Playgroud)

上面的文档提供了一个很好的概述。

https://googlechrome.github.io/samples/media-session/有示例代码和演示。

https://developer.mozilla.org/en-US/docs/Web/API/Media_Session_API有更详细的文档。


Jac*_*son 7

以下是Microsoft 的密钥代码列表 ; 它们包括诸如"VK_VOLUME_MUTE"之类的键.VK_VOLUME_MUTE的关键代码列为0xAD.0xAD是十进制是173.

当然,当我加载以下内容并按下键盘上的静音按钮时,报告的密钥代码为173.因此它们的工作方式与其他任何密钥相同; 但是,如果密钥代码是特定于Windows的,那么我也不会感到惊讶.可能需要一些实验.

<html>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
$(document).ready(function() {
    $(document).keydown(function(ev){
       alert(ev.keyCode);
    });
});
</script>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)


mik*_*ana 4

编辑:现在明确支持媒体键。下面的答案已被弃用。请参阅下面的@thakis 答案。

2012 年旧答案

关于您是否可以比 Chrome 扩展做得更好:不,您不能 - 我已经为一个网站制作了一个内容脚本,并在 OS X 10.7 上的 Chrome 16 当前稳定版本中运行它。该脚本很简单:

console.log('Content script loading');

$("body").bind("keyup",function(event){
    console.log(event.keyCode);
})
Run Code Online (Sandbox Code Playgroud)

并且显示后退、播放/暂停、前进、静音、音量减小或音量增大键没有触发任何事件

有趣的是,未使用的 F5 键会生成一个键码,因此如果您愿意,您可以将其用作替代方案。