Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让videojs自动卸载_Javascript_Html_Video.js - Fatal编程技术网

Javascript 如何让videojs自动卸载

Javascript 如何让videojs自动卸载,javascript,html,video.js,Javascript,Html,Video.js,我目前正在Rails应用程序中使用VideoJS(每个页面上都有一个视频播放器)来显示视频,我遇到了一个非常奇怪的问题: 播放器在我访问的第一个页面上运行得非常好,但是如果我播放视频并访问另一个页面,则第一个页面上的视频将在后台继续播放,即使页面不再打开(您可以听到音频),并且您访问的页面上的视频没有正确初始化(未应用选项,这意味着无法播放视频,因为控件是一个选项)并且控制台显示VIDEOJS:WARN:Player“Player”已初始化。将不应用选项。 如何让VideoJS在用户离开页面时自

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

播放器在我访问的第一个页面上运行得非常好,但是如果我播放视频并访问另一个页面,则第一个页面上的视频将在后台继续播放,即使页面不再打开(您可以听到音频),并且您访问的页面上的视频没有正确初始化(未应用选项,这意味着无法播放视频,因为控件是一个选项)并且控制台显示
VIDEOJS:WARN:Player“Player”已初始化。将不应用选项。

如何让VideoJS在用户离开页面时自动卸载,以及为什么它要继续播放。首先,HTML5视频播放器以前没有这样做

解决这一问题的最佳方法是让VideoJS在页面加载时手动重新加载自己吗?如果是,怎么做

注意:如果我导航到网站内的任何其他页面,视频将继续不初始化,但如果我重新加载该页面,则该页面上的视频将再次工作

注意2:结果表明,如果我单击指向另一个页面的链接,甚至不会触发
onbeforeunload
javascript事件,它只会在您访问一个完全不同的网站时触发,因此我甚至不能在页面卸载时使用该事件来
.dispose()
VideoJS


注意3:
.reset()
似乎也不起作用。

您可以检查播放机是否已经存在并卸载它,然后重新加载它

事实上,我找到了一个相当简单而优雅的解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});
var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

首先检查播放机是否存在。如果存在,则销毁VideoJS实例。如果不存在,则创建变量。然后初始化播放机。

您可以检查播放机是否已存在并卸载它,然后重新加载它

事实上,我找到了一个相当简单而优雅的解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});
var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

首先检查播放器是否存在。如果存在,则销毁VideoJS实例。如果不存在,则创建变量。然后初始化播放器。

我发现这是解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});
var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

中,我发现这是一个解决方案:

if (player) {player.dispose()} else {var player}
player = videojs('player', {
    //options
});
var oldPlayer = document.getElementById('my-player');
videojs(oldPlayer).dispose();

中,通过引用此问题:

我们可以将上述解决方案改写为以下内容:

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); 

通过提及这一问题:

我们可以将上述解决方案改写为以下内容:

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); 

不再工作,dispose现在销毁完整的DOM对象。不再工作,dispose现在销毁完整的DOM对象。