Czy potrafisz wykryć, czy głośność można ustawić za pomocą javascript? Na przykład, aby sprawdzić, czy korzystasz z przeglądarki ios (ale nie wykrywasz ios tylko wtedy, gdy można ustawić głośność). Próbowałem czegoś takiego, ale zawsze wraca to prawda.
Jeśli korzystam z iOS, chcę ukryć przycisk głośności w odtwarzaczu. Wiem, że mogę wykryć iOS, ale chciałem pójść o krok dalej i prawdopodobnie wykryć, czy można zmienić głośność.
var audio = document.createElement("audio");
if(!audio) return false;
audio.volume = 0;
return audio.volume == 0 ? true : false;
3 odpowiedzi
Jedyne, o czym mógłbym pomyśleć, to słuchać volumechange
zdarzenie (które ma uniwersalną obsługę), a następnie ustaw głośność tak, jak robisz (co zgodnie z MDN ma nieznaną obsługę w wielu przeglądarkach) i sprawdź, czy działa?
Pojawia się ten sam problem w iOS Safari. Mogę zaproponować wariant asynchroniczny z detektorem zdarzeń volumechange
.
function testMediaElementVolumeSetterAsync () {
const timeoutPromise = new Promise(resolve => setTimeout(resolve, 1e3, false))
const promise = new Promise((resolve) => {
let video = document.createElement('video')
const handler = () => {
video.removeEventListener('volumechange', handler)
video = null
resolve(true)
}
video.addEventListener('volumechange', handler)
video.volume = 0.5
})
return Promise.race([promise, timeoutPromise])
}
Miałem ten sam problem i po kilku godzinach zrezygnowałem z całkowitego wykrywania iOS. Sprzeciwiłem się, ale teraz kod wydaje się czystszy.
Wypróbowałem pomysł Alexa, który prawie zadziałał, ponieważ zdarzenie nie jest wyzwalane na iOS, ale na innych platformach. Jednak fakt, że ustawienie głośności odbywa się synchronicznie, ale zdarzenie dzieje się asynchronicznie, utrudniało to.