YouTube视频的getCurrentTime()

jmt*_*jmt 5 google-chrome-extension youtube-javascript-api

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

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();

但是我确实得到以下错误:"Uncaught TypeError:无法读取属性'getCurrentTime'的null";

我做错了什么?我为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://*/*"
  ]
}
Run Code Online (Sandbox Code Playgroud)

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

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();
Run Code Online (Sandbox Code Playgroud)

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

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

任何帮助表示赞赏,所以提前感谢.

干杯

小智 11

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

video = document.getElementsByClassName('video-stream')[0];
console.log(video);
console.log(video.currentTime);
Run Code Online (Sandbox Code Playgroud)


Xan*_*Xan 1

正如本正确假设的那样,您正在后台页面的上下文中执行代码,这是错误的。

要与其他页面交互,您需要在其中注入内容脚本。请参阅此处的概述。您可能需要了解如何使用消息传递工作原理,以便可以在内容脚本中收集数据并将其传送到后台页面。

举一个最小的例子,你可以有一个文件inject.js

// WARNING: This example is out of date
// For the current HTML5 player, see other answers' code snippets
ytplayer = document.getElementById("movie_player");
ytplayer.getCurrentTime();
Run Code Online (Sandbox Code Playgroud)

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

chrome.browserAction.onClicked.addListener(function(tab) {
  chrome.tabs.executeScript({
    file: 'inject.js'
  });
});
Run Code Online (Sandbox Code Playgroud)

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

  • 我尝试将脚本注入到我的background.js中,仍然告诉我“ytplayer.getCurrentTime不是一个函数” (3认同)