1 回答

TA貢獻1802條經(jīng)驗 獲得超5個贊
我正在回答我的問題!將媒體鍵與 EvenListener 一起使用并不是實現(xiàn)此目的的有效方法。并非所有瀏覽器都支持媒體會話 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. */ });
}
現(xiàn)在對于 Electron,如果您使用最新版本,那么您可能可以使用媒體會話 API(在渲染器進程中),并且在播放 Youtube 視頻時它可以像 chrome 一樣正常工作(您可以播放/暫停、轉(zhuǎn)到下一個和上一個媒體) ...)。但是,當另一個應(yīng)用程序在我們的 Electron 應(yīng)用程序(例如 Chrome)之前開始使用媒體鍵時,我們?nèi)匀粫龅絾栴},這個問題無法使用媒體會話 API 來解決。在 Electron 中,我們有g(shù)lobalShortcut來自 Electron 包的用于設(shè)置快捷方式的示例:
const { app, globalShortcut } = require('electron')
app.whenReady().then(() => {
? globalShortcut.register('Alt+CommandOrControl+I', () => {
? ? console.log('Electron loves global shortcuts!')
? })
}).then(createWindow)
這對于所有快捷鍵都可以正常工作,但對于媒體鍵則效果不佳!原因是因為Linux密鑰默認被竊取dbus
,所以我們需要操作系統(tǒng)級別控制(直接與dbus交互的包)。我搜索了它,發(fā)現(xiàn)一些傳入的包(未完成)使用 Linux 的 dbus 來處理媒體密鑰。?

TA貢獻1815條經(jīng)驗 獲得超10個贊
應(yīng)該適用于鉻/電子
document.addEventListener('keyup', ({ key }) => {
const mediaKey = [
'MediaTrackNext',
'MediaTrackPrevious',
'MediaPlayPause',
'MediaStop'].includes(key)
mediaKey && console.log(key)
})
添加回答
舉報