我想将this plugin移植到新的videojs版本5.我更新了大部分插件以适应新的videojs.extend()
要求并更新了公共函数声明。
我试图将新组件加载到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.SeekBar
和videojs.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
我注意到RSTimebar
数组中的options_.children
作为对象而不是一对索引/字符串插入。所以我改变了我的界限:
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:警告:RSTimeBar组件已添加到videojs对象中 什么时候应该使用videojs.registerComponent(name, 组分)
我只需要找出正确加载组件的正确和最简单的方法。