亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何檢測鍵盤按鍵上的點擊事件:播放/暫停 (?/??)、Electron Js 上的下一個和上一個

如何檢測鍵盤按鍵上的點擊事件:播放/暫停 (?/??)、Electron Js 上的下一個和上一個

蕭十郎 2023-07-20 10:51:21
根據此JavaScript 檢測播放/暫停鍵盤(虛擬)鍵,可以使用 JavaScript 檢測播放/暫停、下一個和上一個(硬件媒體鍵處理)鍵,但僅限于 Chrome。電子中有類似的東西嗎?PS:它是用于音頻播放器的。
查看完整描述

1 回答

?
12345678_0001

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 來處理媒體密鑰。?


查看完整回答
反對 回復 2023-07-20
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

應該適用于鉻/電子


document.addEventListener('keyup', ({ key }) => { 

  const mediaKey = [

    'MediaTrackNext', 

    'MediaTrackPrevious', 

    'MediaPlayPause', 

    'MediaStop'].includes(key)

    

  mediaKey && console.log(key)

})


查看完整回答
反對 回復 2023-07-20
  • 1 回答
  • 0 關注
  • 240 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號