KHInsider could be added. I already wrote a tampermonkey script that does essentially that:
// ==UserScript==
// @name khinsider volume, autoplay, preload
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match *.khinsider.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=khinsider.com
// @grant none
// @noframes
// ==/UserScript==
let audio = document.querySelector('audio')
if(!audio){
return
}
let album_title =document.querySelectorAll('#pageContent > h2')[0].innerText
let cover_url = document.querySelector('.albumImage > a').href
let info_text = document.querySelectorAll('#pageContent > p')[1].innerText
let infos = info_text.split('\n')
function read_info(key){
let result = infos.find(s => s.startsWith(key))?.slice(key.length)??'-'
return result
}
let publisher = read_info('Published by: ')
let developer = read_info('Developed by: ')
let artist = developer + '/' + publisher
let metadata = new MediaMetadata({
artist: artist,
album: album_title,
artwork: [{ src: cover_url }],
});
navigator.mediaSession.metadata = metadata
let default_timestep = 5
navigator.mediaSession.setActionHandler('seekforward',seek_forward)
function seek_forward(e){
let timestep = e.seekOffset ?? default_timestep
audio.currentTime += timestep
}
navigator.mediaSession.setActionHandler('seekbackward',seek_backward)
function seek_backward(e){
let timestep = e.seekOffset ?? default_timestep
audio.currentTime -= timestep
}
let script = eval(document.querySelector('#pageContent > script').innerHTML.slice(4,-1)) // khinsider script comes packed, stripping the unpacker script of surrounding `eval(` and `)` using eval on the resulting script recovers the uncompressed script
let tracks = JSON.parse(script.substring(script.indexOf('tracks'),script.indexOf(',trackCount')).slice(7,-2)+']') // this script contains the array of track data in its source
function update(){
let current_song_url = audio.src
let current_song_url_without_protocol = current_song_url.slice(8)
let current_track_index = tracks.findIndex(x => x.file == current_song_url_without_protocol)
let current_track = tracks[current_track_index]
let current_track_name = current_track.name
metadata.title = current_track_name
}
update()
audio.addEventListener("loadeddata",update)
You can port that code to your extension if you want.
KHInsider could be added. I already wrote a tampermonkey script that does essentially that:
You can port that code to your extension if you want.