如何访问版本 5 中的 videojs.SeekBar 和 ControlBar?

How can I access videojs.SeekBar and ControlBar in version 5?

我想将 this plugin 移植到新的 videojs 版本 5。我更新了大部分插件以适应新的 videojs.extend() 要求并更新了 public 函数声明。

我坚持的部分是当您尝试将新组件加载到 videojs 中时:

 //Range Slider Time Bar
 videojs.SeekBar.prototype.options_.children.RSTimeBar = {};
 //Panel with the time of the range slider
 videojs.ControlBar.prototype.options_.children.ControlTimePanel = {}; 

如果我理解正确(我有一些疑问),它正在扩展 videojs 的特定部分以包含插件组件。

问题是 videojs.SeekBarvideojs.ControlBar 是未定义的,我不知道在 v5 中访问它们的正确方法(或者创建这些空对象,如果它不是你的方式再做)。 videojs wiki 文章“5.0 changes details

中也没有说明

The full code is available here.。故障线是421和422


编辑

如果将这些行替换为以下行,我可以消除错误:

videojs.getComponent("SeekBar").prototype.options_.children.RSTimeBar = {}; //Range Slider Time Bar
videojs.getComponent("ControlBar").prototype.options_.children.ControlTimePanel = {}; //Panel with the time of the range slider

但是在插件构造函数中,我找不到组件:

  //components of the plugin
  var controlBar = player.controlBar;
  var seekBar = controlBar.progressControl.seekBar;
  this.components.RSTimeBar = seekBar.RSTimeBar; //is undefined

当我探索 videoJs 对象时,在我的调试器中,我确实可以找到 player.controlBar.progressControl.seekBar,但它没有名为 RSTimebar 的子对象,除了 options_.children。这是有道理的,因为它是我定义它的地方。但是不知道为什么4版能找到,5版找不到。


编辑 2

我注意到 options_.children 数组中的 RSTimebar 是作为对象而不是一对 index/string 插入的。所以我把台词改成这样:

    videojs.getComponent("SeekBar").prototype.options_.children.push("RSTimeBar"); //Range Slider Time Bar
videojs.getComponent("ControlBar").prototype.options_.children.push("ControlTimePanel"); //Panel with the time of the range slider

结果:插件已正确加载,每个组件有一个警告:

VIDEOJS: WARN: The RSTimeBar component was added to the videojs object when it should be registered using videojs.registerComponent(name, component)

我现在只需要找出正确和最简单的方法来正确加载组件。

由于 a commit 完成了大部分工作,我终于设法更新了插件。