如何让videojs自动卸载

时间:2017-04-05 01:11:47

标签: javascript html video.js

我目前正在Rails应用程序中使用VideoJS(每页都有一个视频播放器)来显示视频,我遇到了一个非常奇怪的问题:

播放器在我访问的第一页上运行得非常好,但是如果我播放视频并访问另一个页面,即使页面不再打开,第一页的视频仍会在后台播放(您可以听到音频)和您访问过的页面上的视频未正确初始化(未应用选项,这意味着视频无法播放,因为控件是一个选项),控制台显示VIDEOJS: WARN: Player "player" is already initialised. Options will not be applied.

当用户离开页面时,如何让VideoJS自行卸载,为什么它一直在播放,HTML5视频播放器之前没有这样做。

最好的解决方法是让VideoJS在页面加载时手动重新加载吗?如果是这样,怎么办呢?

注意:如果我导航到网站中的任何其他页面,视频仍然无法初始化,但如果我重新加载页面,任何页面,该页面上的视频都会再次运行。

注2:如果我点击指向其他网页的链接,则onbeforeunload javascript事件甚至无法触发,只有当您要完全不同时,它才会触发网站,所以我甚至无法在页面卸载时使用.dispose() VideoJS。

注意3: .reset()似乎也无效。

3 个答案:

答案 0 :(得分:3)

您可以检查播放器是否已存在并将其卸载,然后重新加载。

我实际上能够找到一个相当简单和优雅的解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});

首先检查玩家是否存在。如果是,则会破坏VideoJS实例。如果它没有,它会创建变量。然后它初始化播放器。

答案 1 :(得分:1)

通过引用此问题:https://github.com/videojs/video.js/issues/2904

我们可以将上面的解决方案改写成这样:

const playerId = 'video-player';
const videoOptions = {
        controls: true,
        sources: [{
            src: 'test-file.mp4',
            type: 'video/mp4',
        }]
      };
let player;
let players = videojs.players;
const imaOptions = { adTagUrl };
if (players && Object.keys(players).length) {
   player = players[playerId];
   player.dispose();
} 
player = videojs(playerId,videoOptions);
player.ima(imaOptions); 

答案 2 :(得分:0)

我发现这是解决方案:

var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

它在docs actually