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)
正如本正确假设的那样,您正在后台页面的上下文中执行代码,这是错误的。
要与其他页面交互,您需要在其中注入内容脚本。请参阅此处的概述。您可能需要了解如何使用消息传递工作原理,以便可以在内容脚本中收集数据并将其传送到后台页面。
举一个最小的例子,你可以有一个文件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
归档时间: |
|
查看次数: |
3042 次 |
最近记录: |