如何检测YouTube已从注入的脚本(使用chrome扩展名)完成视频播放?

时间:2018-07-27 22:05:40

标签: javascript google-chrome-extension youtube

我正在尝试制作Chrome扩展程序,以便在观看页面上的视频(例如“ www.youtube.com/watch?=xxxxxxxx”)完成播放时调用我的功能。我想使用注入脚本来做到这一点。 目前,我正在使用setInterval来检查是否video.ended==true,但是我想找到一种没有间隔的工作方式,并且理想地只使用一些事件监听器。

我试图将onended事件监听器添加到#movie_player和视频元素中,但这是行不通的。我也试着听readystatechange event,但是这个也不会触发。向{movie_player添加onplayonplaying事件监听器也不会触发。

有什么方法可以不用间隔来做我想做的事吗?

1 个答案:

答案 0 :(得分:0)

在视频元素上使用ended DOM事件:

var videoElement = document.querySelector('video');
videoElement.addEventListener('ended', function(event) {
  console.log(event);
});

请注意,Youtube网站使用AJAX导航,这意味着在任何给定的选项卡中打开网站时,扩展程序的内容脚本仅运行一次。为yt-navigate-finish添加侦听器以检测这种导航:

document.addEventListener('yt-navigate-finish', function(event) {
  var videoElement = document.querySelector('video');
  videoElement.addEventListener('ended', function(event) {
    console.log(event);
  });
});

使用devtools查看该页面使用的更多事件:

  • in Chrome:打开Elements检查器并切换到“事件侦听器”子面板
    或在控制台中输入getEventListeners(document)(也适用于window和任何DOM元素)
  • in Firefox:打开检查器,然后单击ev和其他标签右侧的event<html>气泡