HTML5 Audio, вызывающий сбой автономного режима и выход на домашний экран в IOS8
У меня есть сайт, который каждый раз, когда исполняется JavaScript document.getElementById('audioID').load();
или же document.getElementById('audioID').play();
это приведет к тому, что мой iPad/ iPod, работающий на iOS8 в автономном режиме, внезапно вылетит и выйдет на домашний экран. Тот же сайт под управлением обычного браузера Safari на iOS8 работает отлично. Я не мог воспроизвести эту проблему на iOS7 либо.
Эта проблема похожа на следующую проблему стека, которая, по-видимому, описывает ошибку IOS8: Почему видео HTML5 не воспроизводится в IOS 8 WebApp(webview)? за исключением того, что моя проблема касается аудио вместо видео и не просто не проигрывает аудио, но и разбивает автономное окно.
Кто-нибудь еще испытывал это, или знает, что именно может вызывать аварийное завершение автономного режима?
[ОБНОВИТЬ]
Похоже, что комбинация кнопки отправки и попытки воспроизвести звук в автономном режиме iOS8 приведет к сбою. Я создал краткий обзор этой ошибки здесь: https://gist.github.com/macmadill/262d65ad1c02936fca4b
[ОБНОВИТЬ]
Я перепроверил эту ошибку на 3 разных iPad, вот мои результаты:
iOS 8.1.2 - сбой автономного режима
iOS 8.3 - нет проблем
iOS 9.2.1 - без проблем
2 ответа
Единственное решение - использовать API Web Audio.
Я обнаружил, что https://github.com/goldfire/howler.js/ - отличная обертка, которая облегчает использование.
Удачи
Я столкнулся с той же проблемой. Для немного сложного обходного пути получается, что использование API Web Audio работало, даже когда "веб-приложение" было сохранено на домашнем экране ios. Смотрите следующее:
- https://developer.apple.com/library/safari/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/PlayingandSynthesizingSounds/PlayingandSynthesizingSounds.html
- https://developer.mozilla.org/en-US/docs/Web/API/AudioContext
- http://codetheory.in/solve-your-game-audio-problems-on-ios-and-android-with-web-audio-api/
- http://www.html5rocks.com/en/tutorials/webaudio/intro/
В некоторых примерах используется устаревший API. Например:
- noteOn (x) теперь начало (x).
- createGainNode () теперь является createGain()