我试图通过插件尝试将菜单发送到video.js播放器的控制栏。这是我最终目标的demo。问题是该演示是在video.js本身的控制栏中添加一个菜单,而我想要一个添加菜单的插件。
到目前为止,我已经能够创建一个向控件栏添加MenuButton
的插件,但我无法使用任何菜单项填充菜单。
这是我现在所处的demo。
问题是当我尝试使用PlaybackRateMenuItem
创建新的new videojs.PlaybackRateMenuItem(this, {rate: rates[i] + 'x'})
对象时。 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
,两个参数都将变为未定义,我不知道为什么。任何想法或正确方向的观点?谢谢!
答案 0 :(得分:0)
原来我在这里遇到两个主要问题。
createMenu
类的类重写createItems
方法而不是videojs.MenuButton
方法。this
类的构造函数的videojs.MenuItem
参数必须是videojs player对象,而不仅仅是this
。问题是这个对象的名称在video.js的缩小版本中被破坏了。对于这种情况,我发现使用this.c
是播放器对象,但总的来说,我发现使用未分类的版本video.dev.js
更容易,而不必处理名称修改。在这种情况下,使用this.player_
是正确的。