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;
2
Toniq 20 grudzień 2019, 00:28
1
Czy możesz podać przykład sytuacji, w której spodziewasz się, że nie będziesz w stanie ustawić głośności?
 – 
Felix Kling
20 grudzień 2019, 00:32
Czy próbujesz zmienić ustawienia głośności urządzenia?
 – 
user47589
20 grudzień 2019, 00:33
2
Całkiem pewien, że nie ma interfejsu API przeglądarki ujawniającego coś takiego.
 – 
Bryantee
20 grudzień 2019, 00:39

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?

0
Alex Wayne 20 grudzień 2019, 00:52

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])
}
1
Aleksey Konstantinov 18 grudzień 2020, 13:54

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.

0
simlmx 12 grudzień 2020, 00:17
Mówisz, że rozwiązanie Alksey nie działa w niektórych scenariuszach? Czym oni są? Wygląda na to, że dla mnie działa, chyba że brakuje mi niektórych skrajnych przypadków?
 – 
Mark Fisher
18 styczeń 2021, 16:12