不使用 YouTube 更改当前 YouTube 视频时间 API
Change the current YouTube video time without using YouTube API
我正在编写一个 Chrome 扩展(不使用 YouTube 播放器 API 的 iframe 嵌入),我想在其中添加跳转到 YouTube 中某个时间戳的功能视频。所以,我会有一个 HH:MM:SS 格式的时间戳,单击它会使视频时间“搜索”到该时间戳。我找到了一个使用以下代码的答案 here:
document.getElementById("movie_player").seekTo(seconds,true);
但是,每当我尝试通过内容脚本注入此代码时,我都会收到此错误:
Error in event handler: TypeError: document.getElementById(...).seekTo
is not a function
我也会分享我的代码以进行说明。首先,popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {message: scroll_time}, null);
});
其中 scroll_time 是表示视频时间戳的字符串。在 contentScript 文件中是以下代码:
var sec = parseInt(request.message);
document.getElementById("movie_player").seekTo(sec, true);
我还在 popup.js 文件中尝试了以下代码:
chrome.tabs.query({active: true, currentWindow: true}, tabs => {
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
files: ['scrollVideo.js'],
}, ()=>{
chrome.tabs.sendMessage(tabs[0].id,{scrollTo: scroll_time});
});
});
在单独的文件中使用以下代码:
chrome.runtime.onMessage.addListener(message=>{
if (message.scrollTo) {
scrollVid(message.scrollTo);
};
});
function scrollVid(time) {
var sec = parseInt(time);
document.getElementById("movie_player").seekTo(sec, true);
};
在这两种方法中,我都遇到了上述错误。我希望避免使用 YouTube Player API for iframe Embeds,其中描述了 seekTo 函数。没有 API 有什么办法可以做到这一点,或者使用它是唯一的方法吗?请帮助我,因为这是我希望我的扩展能够做的最后一件事。
我已经在 YouTube 上试过了 window 并且成功了:
document.getElementsByTagName('video')[0].currentTime = 20
我不确定这是否涵盖了您需要的所有内容,或者它是否会按预期工作但希望它能:)
我正在编写一个 Chrome 扩展(不使用 YouTube 播放器 API 的 iframe 嵌入),我想在其中添加跳转到 YouTube 中某个时间戳的功能视频。所以,我会有一个 HH:MM:SS 格式的时间戳,单击它会使视频时间“搜索”到该时间戳。我找到了一个使用以下代码的答案 here:
document.getElementById("movie_player").seekTo(seconds,true);
但是,每当我尝试通过内容脚本注入此代码时,我都会收到此错误:
Error in event handler: TypeError: document.getElementById(...).seekTo is not a function
我也会分享我的代码以进行说明。首先,popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {message: scroll_time}, null);
});
其中 scroll_time 是表示视频时间戳的字符串。在 contentScript 文件中是以下代码:
var sec = parseInt(request.message);
document.getElementById("movie_player").seekTo(sec, true);
我还在 popup.js 文件中尝试了以下代码:
chrome.tabs.query({active: true, currentWindow: true}, tabs => {
chrome.scripting.executeScript({
target: {tabId: tabs[0].id},
files: ['scrollVideo.js'],
}, ()=>{
chrome.tabs.sendMessage(tabs[0].id,{scrollTo: scroll_time});
});
});
在单独的文件中使用以下代码:
chrome.runtime.onMessage.addListener(message=>{
if (message.scrollTo) {
scrollVid(message.scrollTo);
};
});
function scrollVid(time) {
var sec = parseInt(time);
document.getElementById("movie_player").seekTo(sec, true);
};
在这两种方法中,我都遇到了上述错误。我希望避免使用 YouTube Player API for iframe Embeds,其中描述了 seekTo 函数。没有 API 有什么办法可以做到这一点,或者使用它是唯一的方法吗?请帮助我,因为这是我希望我的扩展能够做的最后一件事。
我已经在 YouTube 上试过了 window 并且成功了:
document.getElementsByTagName('video')[0].currentTime = 20
我不确定这是否涵盖了您需要的所有内容,或者它是否会按预期工作但希望它能:)