我目前正在Rails应用程序中使用VideoJS(每页都有一个视频播放器)来显示视频,我遇到了一个非常奇怪的问题:
播放器在我访问的第一页上运行得非常好,但是如果我播放视频并访问另一个页面,即使页面不再打开,第一页的视频仍会在后台播放(您可以听到音频)和您访问过的页面上的视频未正确初始化(未应用选项,这意味着视频无法播放,因为控件是一个选项),控制台显示VIDEOJS: WARN: Player "player" is already initialised. Options will not be applied.
当用户离开页面时,如何让VideoJS自行卸载,为什么它一直在播放,HTML5视频播放器之前没有这样做。
最好的解决方法是让VideoJS在页面加载时手动重新加载吗?如果是这样,怎么办呢?
注意:如果我导航到网站中的任何其他页面,视频仍然无法初始化,但如果我重新加载页面,任何页面,该页面上的视频都会再次运行。
注2:如果我点击指向其他网页的链接,则onbeforeunload
javascript事件甚至无法触发,只有当您要完全不同时,它才会触发网站,所以我甚至无法在页面卸载时使用.dispose()
VideoJS。
注意3: .reset()
似乎也无效。
答案 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();
中