我'm trying to a menu to the control bar of a video.js player via a plugin. Here'是我最终目标的demo . 问题是该演示是在video.js本身的控制栏中添加一个菜单,而我想要一个添加菜单的插件 .
到目前为止,我已经能够创建一个插件,将 MenuButton
添加到控制栏,但我无法使用任何菜单项填充菜单 .
这是我现在所处的位置demo .
问题是当我尝试用 new videojs.PlaybackRateMenuItem(this, {rate: rates[i] + 'x'})
创建一个新的 PlaybackRateMenuItem
对象时 . JS控制台在 video.dev.js
的第805行引发以下错误:
Uncaught TypeError: Cannot read property 'guid' of undefined
这对应于未分类版本中的以下功能:
vjs.bind = function(context, fn, uid) {
// Make sure the function has a unique ID
if (!fn.guid) {
fn.guid = vjs.guid++;
}
... omitted ...
};
或者更具体地说,这一行: if (!fn.guid) {
.
从调试器中逐步执行,我看到 fn
作为 undefined
传入,函数的调用者是:
vjs.bind(this.player(), this.player().reportUserActivity);
当调用此函数时, this.player()
返回一个定义的值,但是一旦 vjs.bind
被调用,两个参数都将变为未定义,我不知道为什么 . 任何想法或正确方向的观点?谢谢!
1 回答
结果我在这里遇到了两个主要问题 .
为我的扩展
videojs.MenuButton
类的类重写createMenu
方法而不是createItems
方法 .videojs.MenuItem
类的构造函数的this
参数必须是videojs player对象,而不仅仅是this
. 问题是这个对象的名称在video.js的缩小版本中被破坏了 . 对于这种情况,我发现使用this.c
是播放器对象,但总的来说,我发现使用未经授权的版本video.dev.js
更容易,而不必处理名称修改 . 在这种情况下,使用this.player_
是正确的 .