YouTube视频的getCurrentTime()

时间:2014-04-03 17:12:52

标签: google-chrome-extension youtube-javascript-api

我正在使用Javascript编写Chrome扩展程序,我想在youtube.com上获取播放视频的当前时间。我尝试使用问题Getting Current YouTube Video Time的答案,例如:

  

ytplayer = document.getElementById(" movie_player");

     

ytplayer.getCurrentTime();

但是我确实收到以下错误:"未捕获的TypeError:无法读取属性' getCurrentTime' of null&#34 ;;

我做错了什么?我为ElementId尝试了不同的值 - movie_player,player ....

感谢任何帮助。提前谢谢。

干杯。

编辑:

这是我的清单:

{
  "manifest_version": 2,

  "name": "",
  "description": "",
  "version": "1.0",

  "browser_action": {
    "default_icon": "icon.png",
    "default_popup": "basic.html"
  },
  "permissions": [
    "tabs",
    "activeTab", "http://*/*", "https://*/*"
  ]
}

另一件事是: 如果我执行此代码:

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();

在Youtube页面的Javascript控制台中,它可以正常工作并返回当前时间。 但是,如果我从扩展名的扩展名或控制台执行此值,则第一行返回值为null。

因此,正如Ben在下面所假设的那样,问题似乎是我的扩展程序甚至无法访问Youtube页面。

感谢任何帮助,所以提前感谢。

干杯

4 个答案:

答案 0 :(得分:2)

使用以下代码适用于chrome扩展程序:

video = document.getElementsByClassName('video-stream')[0];
console.log(video);
console.log(video.currentTime);

答案 1 :(得分:1)

正如Ben正确假设的那样,你在背景页面的上下文中执行代码,这是错误的。

要与其他页面进行交互,您需要在其中注入内容脚本。请参阅here的概述。您可能需要了解Messaging的工作原理,以便您可以在内容脚本中收集数据并将其传达给后台页面。

要制作一个最小的示例,您可以拥有一个文件inject.js

ytplayer = document.getElementById("movie_player");
ytplayer.getCurrentTime();

在您的后台页面脚本中,您可以将其注入当前页面,如下所示(例如,单击按钮时)

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript({
    file: 'inject.js'
  });
});

然后,您将在当前打开页面的控制台中看到exeution的结果。要重新报告结果,您需要使用chrome.runtime.sendMessage

答案 2 :(得分:1)

在2020年,似乎我们应该使用:player.playerInfo.currentTime

full code on codepen

答案 3 :(得分:0)

当您引用正确的页面时,您只能使用getElementById。你使用正确的身份证。如果你试图从另一个页面访问播放,你可以使用jquery .load()函数

--------- ---------- EDIT

在样本中他们这样做:     function getCurrentTime() { var currentTime = player.getCurrentTime(); return roundNumber(currentTime, 3); }