Blink and WebKit have a setting for requiring a “user gesture” to play or pause an audio or video element, which is enabled in Opera for Android, Chrome for Android, the default Android browser, Safari for iOS and probably other browsers. This makes some sense, since mobile devices are used in public and in bed, where unsolicited sound from random Web sites could be a nuisance. Also, autoplaying video ads would waste bandwidth.
The trouble is that this gets in the way of reasonable use cases like games or playlists, and developers are not impressed. We’ve discussed this a lot internally at Opera, and as an experiment we’ve removed the restrictions in Opera beta for Android.
However, I’ve also found a workaround for current browsers. As of WebKit r108831, all restrictions are removed in the first successful load()
or play()
call. Any user gesture is accepted, so one can listen to all input events and remove the restrictions as soon as the user clicks, touches or uses the keyboard. One does not need to start playback at that point, but can wait until a later time. For example, one could “liberate” a number of audio elements for later use in a game.
I’ve prepared a demo of the workaround. It works in current versions of Opera, Chrome and Safari. While it does not work in the default Android browser prior to KitKat, even there it could be adapted to e.g. autoplay background music by calling play()
instead of load()
in the input event handler.
Given this, I think that either a user gesture should be required for every play()
or the restrictions should be removed completely. My tentative suggestion is the latter.
Wow, I didn’t know about that setting! Is there a way to enable it for desktop Chrome as well? I would love to be able to stop videos from auto-playing on YouTube.
No, I’ve looked in the Chromium source and this setting is only used on Android. However, it looks like the YouTube Options extension can prevent autoplay, on YouTube at least.
It’a a shame, that would be a great addition to the current click-to-play option.
Pingback: Bruce Lawson’s personal site : Reading List
Pingback: Android Chrome does not allow applications to play HTML5 audio without an explicit action by the user | Maurice's Blog - Mo Knowledge, Mo problems...