Javascript 如何将事件处理程序注册到由videojs处理的视频?

Javascript 如何将事件处理程序注册到由videojs处理的视频?,javascript,video.js,Javascript,Video.js,我想为videojs处理的视频注册一个事件处理程序,但我无法以可靠的方式选择元素,因为videojs从视频标记中删除属性,并将它们添加到它添加的容器元素中。videojs似乎在每个视频元素ID上附加了相同的后缀:\u html5\u api,当包装在容器内时,从以下位置引用: //更新标记id/class以用作HTML5播放技术 //可能认为我们应该在嵌入容器so.vjs技术类后执行此操作 //不闪烁100%宽度/高度,但该类仅适用于.video js父级 tag.id += '_html5_a

我想为videojs处理的视频注册一个事件处理程序,但我无法以可靠的方式选择元素,因为videojs从视频标记中删除属性,并将它们添加到它添加的容器元素中。

videojs似乎在每个视频元素ID上附加了相同的后缀:
\u html5\u api
,当包装在容器内时,从以下位置引用:

//更新标记id/class以用作HTML5播放技术

//可能认为我们应该在嵌入容器so.vjs技术类后执行此操作

//不闪烁100%宽度/高度,但该类仅适用于.video js父级

tag.id += '_html5_api';
因此,有人会争辩说,一个琐碎的修复应该是这样的:

var vid=document.getElementById(“ORIGINALVIDEOID\u html5\u api”)

当然,这种攻击缺乏可靠性,因为这个后缀在将来的版本中可能会改变。但是,将来不太可能更改的一件事是包装器div中存在
video
元素(尽管ID不同)

因此,获取视频元素本身的更可靠的方法是(假设视频标签ID为“酷”):

在Firefox中会产生:

我在上面的脚本中包括了两种方法:一种是直接的,另一种是间接的(通过文档并使用获取的ID)。当然,您可以使用您想要的
video1
video2
中的任何一种


这里有几点需要注意:

  • 这仅在
    videojs().ready()
    函数中起作用;这是一种100%确保玩家已加载的方法
  • contentEl()
    返回包装器div,然后对其使用
    querySelector()
    访问视频元素

其他答案是试图在播放器中获取视频元素,但这是有缺陷的,因为播放器技术可能不是视频元素,例如Flash技术。您应该使用video.js API来收听将从技术中浮现的事件

var player = videojs("id");
player.on('play', function() {…});

-1:这是如何回答这个问题的?首先,它没有提供对视频元素本身的引用,这正是OP想要的。你怎么知道OP需要处理什么样的事件?或者什么时候?第二,无论它做什么,它都只在播放视频时做。第三,问题中没有具体提到
flash
视频;你是“将军”,结果错过了OP的直接问题。下一次,在没有评论的否决投票之前(在答案被接受之后),花一分钟时间进行自我反思:“我自己的答案是否解决了问题提出的问题?”
var player = videojs("id");
player.on('play', function() {…});