您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Chrome global media control support for netease cloud music
当前为
- // ==UserScript==
- // @name Netease cloud music controller
- // @namespace https://github.com/superboy724/NeteaseCloudMusicController
- // @version 1.0.5
- // @description Chrome global media control support for netease cloud music
- // @author superboy724
- // @match music.163.com
- // @grant none
- // ==/UserScript==
- var NeteaseMusicController = {
- neteaseController : NEJ.P('nm.w').uX2x.fQ8I(),
- prev : function(){
- //网易云上一曲
- this.neteaseController.EB5G()
- },
- next : function(){
- //网易云下一曲
- this.neteaseController.pl1x()
- }
- }
- function getItemToJson(key){
- return JSON.parse(localStorage.getItem(key))
- }
- //重写localstorage的setItem方法,给localstorage的内容赋值时进行回调
- function overrideLocalStorageSetItem(caller){
- let superMethod = localStorage.setItem
- localStorage.setItem = function(key,value){
- superMethod.apply(this,arguments)
- caller(key)
- }
- }
- //初始化media session
- function registerMediaSession(){
- if ('mediaSession' in navigator){
- navigator.mediaSession.metadata = new MediaMetadata({
- title: '',
- artist: '',
- album: '',
- artwork: []
- })
- } else {
- return false
- }
- //注册“上一曲”按钮
- navigator.mediaSession.setActionHandler('previoustrack', function() {
- NeteaseMusicController.prev()
- });
- //注册“下一曲”按钮
- navigator.mediaSession.setActionHandler('nexttrack', function() {
- NeteaseMusicController.next()
- });
- return true
- }
- //更新media session元数据
- function playlistUpdate(){
- let playersetting = getItemToJson('player-setting')
- let trackInfos = getItemToJson('track-queue')
- if((playersetting && trackInfos) == false){
- console.info("Chrome media control support for netease cloud music:storage is empty")
- return;
- }
- if(trackInfos.length == 0){
- console.info("Chrome media control support for netease cloud music:playlist is empty")
- return;
- }
- let playlistIndex = playersetting.index
- let trackInfo = trackInfos[playlistIndex]
- let artistNames = ''
- let artwork = []
- for(i = 0;i<=trackInfo.artists.length - 1;i++){
- artistNames += i == 0 ? trackInfo.artists[i].name : '/' + trackInfo.artists[i].name
- }
- artwork.push({sizes: "130x130",src:trackInfo.album.picUrl})
- navigator.mediaSession.metadata.title = trackInfo.name
- navigator.mediaSession.metadata.artist = artistNames
- navigator.mediaSession.metadata.album = trackInfo.album.name
- navigator.mediaSession.metadata.artwork = artwork
- }
- (function() {
- 'use strict';
- if(!registerMediaSession()){
- console.error("Chrome media control support for netease cloud music:unsupport")
- }
- overrideLocalStorageSetItem((key)=>{
- //1.网易云换歌时会将当前播放到播放列表的第几曲写入player-setting中,则检测到该key中内容更新时进行mediasession的更新
- //2.当发生播放列表更改时也进行更新
- if(key === 'player-setting' || key === 'track-queue'){
- playlistUpdate()
- }
- })
- //所有内容初始化完毕后给mediasession赋初始值
- playlistUpdate()
- })()