1
0
mirror of https://github.com/hakimel/reveal.js.git synced 2025-10-26 03:36:17 +01:00

fix initial video autoplay not working in android

This commit is contained in:
Hakim El Hattab
2025-09-03 10:34:22 +02:00
parent 4cf184924d
commit 1427059378
7 changed files with 45 additions and 8 deletions

View File

@@ -9,6 +9,8 @@ import fitty from 'fitty';
*/
export default class SlideContent {
allowedToPlay = true;
constructor( Reveal ) {
this.Reveal = Reveal;
@@ -332,7 +334,11 @@ export default class SlideContent {
// If autoplay does not work, ensure that the controls are visible so
// that the viewer can start the media on their own
if( promise && typeof promise.catch === 'function' && el.controls === false ) {
promise.catch( () => {
promise
.then( () => {
this.allowedToPlay = true;
})
.catch( () => {
el.controls = true;
// Once the video does start playing, hide the controls again
@@ -432,7 +438,19 @@ export default class SlideContent {
// Don't restart if media is already playing
if( event.target.paused || event.target.ended ) {
event.target.currentTime = 0;
event.target.play();
const promise = event.target.play();
if( promise && typeof promise.catch === 'function' ) {
promise
.then( () => {
this.allowedToPlay = true;
} )
.catch( ( error ) => {
if( error.name === 'NotAllowedError' ) {
this.allowedToPlay = false;
}
} );
}
}
}
@@ -544,4 +562,15 @@ export default class SlideContent {
}
/**
* Checks whether media playback is blocked by the browser. This
* typically happens when media playback is initiated without a
* direct user interaction.
*/
isNotAllowedToPlay() {
return !this.allowedToPlay;
}
}