Browser seluler memerlukan tindakan pengguna untuk mulai memutar elemen Audio. Peristiwa klik memenuhi persyaratan, namun tampaknya touchstart bukanlah peristiwa permulaan yang dapat diterima di Chrome pada Android atau iOS. (Lihat di bawah)
Adakah yang tahu di mana menemukan definisi tepat tentang konteks peristiwa yang diperlukan untuk mulai bermain.
(Saya mencoba memecahkan masalah UX menggunakan ide-ide di Bagaimana untuk mencegah zoom ketuk dua kali di iOS dan Android. Sejak memposting pertanyaan awal saya, saya telah menemukan solusi yang memecahkan masalah UX tanpa menggunakan touchstart, tapi menurut saya pertanyaan penting tentang peristiwa mana dianggap sebagai tindakan pengguna yang masih valid.)
Tambahan:
Ada anggapan bahwa saya salah tentang acara touchstart, jadi sebagai catatan, saya menyediakan program pengujian yang sepele. Karena memerlukan file musik asli dan perangkat seluler, JSFiddle bukanlah platform yang cocok (kecuali ada yang tahu cara mensimulasikan acara touchstart di biola). Untuk mereproduksi pengamatan saya, edit javascript untuk memuat file audio Anda sendiri.
<!DOCTYPE html>
<html>
<body>
<br>
<button type="button" id="but1">click</button>
<button type="button" id="but2">touch</button>
<br>
<br>
<span id="message"></span>
<script>
var e;
e = document.getElementById('but1');
e.onclick = click;
e = document.getElementById('but2');
e.ontouchstart = touchstart;
function click() {
alert('caught click');
play();
event.preventDefault();
}
function touchstart() {
alert('caught touchstart');
play();
event.preventDefault();
}
var p;
var t;
function play() {
p = new Audio();
p.src = '/k487.mp3'; // CHANGE THIS
p.preload = 'auto';
p.play();
t = setInterval(report,1000);
}
function report() {
var s = 'Player readyState='+p.readyState+', currentTime='+p.currentTime;
var e = document.getElementById('message');
e.innerHTML = s;
}
</script>
</body>
</html>
Saat saya memuat halaman ini di Chrome 58 pada Android 6.0.1 tombol Klik berfungsi seperti yang diharapkan, menghasilkan popup, memutar musik, dan memperbarui waktu pemutaran.
Jika saya memuat ulang halaman dan menyentuh tombol Sentuh, saya mendapatkan popup, namun tidak ada musik yang diputar. Tampilan status menunjukkan readyState sebesar 4 dan currentTime sebesar 0. Dengan kata lain, event touchstart diizinkan untuk memuat audio namun tidak untuk memulai pemutaran.
Karena saya tidak dapat menemukan dokumentasi tentang peristiwa apa yang dimaksudkan agar berfungsi, saya tidak tahu apakah menganggap ini sebagai bug Chrome, atau perilaku yang dimaksudkan.