如何检测键盘按键上的点击事件:播放/暂停 (▶/❚❚)、Electron Js 上的下一个和上一个

根据此JavaScript 检测播放/暂停键盘(虚拟)键,可以使用 JavaScript 检测播放/暂停、下一个和上一个(硬件媒体键处理)键,但仅限于 Chrome。电子中有类似的东西吗?PS:它是用于音频播放器的。



萧十郎
浏览 108回答 1
1回答

12345678_0001

我正在回答我的问题!将媒体键与 EvenListener 一起使用并不是实现此目的的有效方法。并非所有浏览器都支持媒体会话 API。使用媒体会话 API 的示例:if ('mediaSession' in navigator) {//setting the metadata  navigator.mediaSession.metadata = new MediaMetadata({    title: 'Unforgettable',    artist: 'Nat King Cole',    album: 'The Ultimate Collection (Remastered)',    artwork: [      { src: 'https://dummyimage.com/96x96',   sizes: '96x96',   type: 'image/png' },      { src: 'https://dummyimage.com/128x128', sizes: '128x128', type: 'image/png' },      { src: 'https://dummyimage.com/192x192', sizes: '192x192', type: 'image/png' },      { src: 'https://dummyimage.com/256x256', sizes: '256x256', type: 'image/png' },      { src: 'https://dummyimage.com/384x384', sizes: '384x384', type: 'image/png' },      { src: 'https://dummyimage.com/512x512', sizes: '512x512', type: 'image/png' },    ]  });  navigator.mediaSession.setActionHandler('play', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('pause', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('stop', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('seekbackward', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('seekforward', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('seekto', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('previoustrack', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('nexttrack', function() { /* Code excerpted. */ });  navigator.mediaSession.setActionHandler('skipad', function() { /* Code excerpted. */ });}现在对于 Electron,如果您使用最新版本,那么您可能可以使用媒体会话 API(在渲染器进程中),并且在播放 Youtube 视频时它可以像 chrome 一样正常工作(您可以播放/暂停、转到下一个和上一个媒体) ...)。但是,当另一个应用程序在我们的 Electron 应用程序(例如 Chrome)之前开始使用媒体键时,我们仍然会遇到问题,这个问题无法使用媒体会话 API 来解决。在 Electron 中,我们有globalShortcut来自 Electron 包的用于设置快捷方式的示例:const { app, globalShortcut } = require('electron')app.whenReady().then(() => {  globalShortcut.register('Alt+CommandOrControl+I', () => {    console.log('Electron loves global shortcuts!')  })}).then(createWindow)这对于所有快捷键都可以正常工作,但对于媒体键则效果不佳!原因是因为Linux密钥默认被窃取dbus,所以我们需要操作系统级别控制(直接与dbus交互的包)。我搜索了它,发现一些传入的包(未完成)使用 Linux 的 dbus 来处理媒体密钥。 

动漫人物

应该适用于铬/电子document.addEventListener('keyup', ({ key }) => {   const mediaKey = [    'MediaTrackNext',     'MediaTrackPrevious',     'MediaPlayPause',     'MediaStop'].includes(key)      mediaKey && console.log(key)})
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript