Поскольку callbackFn
вызывается асинхронно, вы можете изменить установщик HTMLMediaElement.prototype
в его свойстве volume
, так что изменение тома элемента с src
, который вас интересует, приведет кисходный сеттер вызывается с объемом, равным 1/10 от того, с которым он будет вызван по умолчанию:
const { prototype } = HTMLMediaElement;
const { set: setter, get: getter } = Object.getOwnPropertyDescriptor(prototype, 'volume');
Object.defineProperty(prototype, 'volume', {
get() {
return getter.call(this);
},
set(arg) {
const newArg = this.src.endsWith('/sounds/warframe_alarm.mp3')
? arg / 10
: arg;
setter.call(this, newArg);
}
});
Конечно, обратите внимание, что это только хак, если вы не можете изменить существующий JSстраницы, например, с использованием usercript.
Я ищу способ доступа к аудио элементам, которые существуют на веб-странице, но не были добавлены в DOM
Уверен, что единственный способ сделать что-то подобное - это использовать хак, например, перезаписать document.createElement
кодом, который запускается до запуска кода страницы, использующего createElement
.