You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using the Splide extension for video, an error occurs if you attempt to destroy a Splide instance containing an HTML video slide that hasn't been visited. I think the error is due to the destroy method in the HTMLVideoPlayer class not checking if the player exists before attempting to destroy it. I think the method also incorrectly uses addEventListener instead of removeEventListener.
Create a Splide instance with multiple slides, including at least one slide containing an HTML video.
Do not navigate to the slide with the video.
Attempt to destroy the Splide instance.
Proposed Solution:
Add check for existence of player.
Replace addEventListener with removeEventListener.
destroy(): void{super.destroy();const{ player }=this;constoff=player.addEventListener.bind(player);off('play',this.onPlay);off('pause',this.onPause);off('ended',this.onEnded);off('loadeddata',this.onPlayerReady);}
Suggested amendment:
destroy(): void{super.destroy();const{ player }=this;if(!player)return;constoff=player.removeEventListener.bind(player);off('play',this.onPlay);off('pause',this.onPause);off('ended',this.onEnded);off('loadeddata',this.onPlayerReady);}
Without navigating to slide 3 (the video slide), click the "Destroy" button.
The Splide instance will not be destroyed and a console error will be produced:
splide-extension-video.esm.js:552 Uncaught TypeError: Cannot read properties of undefined (reading 'addEventListener')
at ae.destroy (splide-extension-video.esm.js:552:24)
at fe.destroy (splide-extension-video.esm.js:3440:19)
at splide-extension-video.esm.js:3472:14
at O (splide-extension-video.esm.js:272:13)
at Object.u [as destroy] (splide-extension-video.esm.js:3471:5)
at splide.esm.js:3118:40
at splide.esm.js:139:30
at Array.forEach (<anonymous>)
at it (splide.esm.js:138:59)
at n.destroy (splide.esm.js:3117:7)
Expected Behaviour
Splide instance should be destroyed without errors.
A "Destroyed." message should appear in the console log showing the instance destroy event has been successfully triggered.
The text was updated successfully, but these errors were encountered:
Checks
Version
0.8.0
Description
When using the Splide extension for video, an error occurs if you attempt to destroy a Splide instance containing an HTML video slide that hasn't been visited. I think the error is due to the destroy method in the HTMLVideoPlayer class not checking if the player exists before attempting to destroy it. I think the method also incorrectly uses
addEventListener
instead ofremoveEventListener
.Proposed Solution:
Add check for existence of player.
Replace
addEventListener
withremoveEventListener
.Current code:
https://github.com/Splidejs/splide-extension-video/blob/e71a80264d9e384caf3ddca54227b339cc75e660/src/js/players/html/HTMLVideoPlayer.ts
Suggested amendment:
Reproduction Link
https://codepen.io/ElwoodP/pen/mdNRWpO
Steps to Reproduce
Expected Behaviour
Splide instance should be destroyed without errors.
A "Destroyed." message should appear in the console log showing the instance destroy event has been successfully triggered.
The text was updated successfully, but these errors were encountered: