1 回答
TA贡献1802条经验 获得超5个赞
我正在回答我的问题!将媒体键与 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 来处理媒体密钥。
TA贡献1815条经验 获得超10个赞
应该适用于铬/电子
document.addEventListener('keyup', ({ key }) => {
const mediaKey = [
'MediaTrackNext',
'MediaTrackPrevious',
'MediaPlayPause',
'MediaStop'].includes(key)
mediaKey && console.log(key)
})
添加回答
举报