我正在使用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页面。
感谢任何帮助,所以提前感谢。
干杯
答案 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
。
答案 3 :(得分:0)
当您引用正确的页面时,您只能使用getElementById。你使用正确的身份证。如果你试图从另一个页面访问播放,你可以使用jquery .load()
函数
--------- ---------- EDIT
在样本中他们这样做:
function getCurrentTime() {
var currentTime = player.getCurrentTime();
return roundNumber(currentTime, 3);
}