【问题标题】:getCurrentTime() for YouTube VideoYouTube 视频的 getCurrentTime()
【发布时间】:2014-04-03 17:12:52
【问题描述】:

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

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();

但我确实收到以下错误:“未捕获的 TypeError:无法读取属性 'getCurrentTime' of 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://*/*"
  ]
}

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

ytplayer = document.getElementById("movie_player");

ytplayer.getCurrentTime();

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

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

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

干杯

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这是唯一对我有用的东西!也在 chrome 扩展中使用它。很奇怪,否则它不会工作
【解决方案2】:

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

full code on codepen

【讨论】:

    【解决方案3】:

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

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

    举个简单的例子,你可以有一个文件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();
    

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

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

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

    【讨论】:

    • 嗨。遇到同样的问题,您的解决方案也没有帮助。
    • 我尝试将脚本注入到我的 background.js 中,仍然告诉我 ytplayer.getCurrentTime is not a function
    • 我得到了 inject.js:1 Uncaught TypeError: n.getCurrentTime is not a function at Object. (inject.js:1) at n (inject.js:1) at inject.js:1 在 inject.js:1
    • 我认为这是由于 YT 播放器 API 更改所致。答案的“内容”(您需要页面级注入)仍然存在,即使脚本可能需要有所不同。
    • 对我来说 document.getElementsByClassName('video-stream')[0]; 努力获取当前时间,我在 chrome 扩展中使用它
    【解决方案4】:

    您只能在引用正确页面时使用 getElementById。您使用了正确的 ID。如果您尝试访问另一个页面的播放表单,您可以使用 jquery .load() 函数

    ---------编辑----------

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

    【讨论】:

    • 我正在激活我的插件之一 Youtube 页面。它是目前在我的浏览器中打开的唯一一个,只是为了测试。
    猜你喜欢
    • 2017-04-15
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 2013-07-02
    • 2015-09-20
    • 1970-01-01
    • 2012-12-21
    • 2011-08-10
    相关资源
    最近更新 更多