Estoy escribiendo una extensión de Chrome (que NO usa la API del reproductor de YouTube para incrustaciones de iframe), en la que quiero agregar la funcionalidad para saltar a una determinada marca de tiempo en un video de YouTube. Entonces, tendría una marca de tiempo en el formato HH: MM: SS, y al hacer clic en ella, el tiempo del video "buscaría" esa marca de tiempo. Encontré una respuesta aquí que usa el siguiente código:
document.getElementById("movie_player").seekTo(seconds,true);Sin embargo, cada vez que intento inyectar este código a través de un script de contenido, aparece este error:
Error en el controlador de eventos: TypeError: document.getElementById(...).seekTo no es una función
Compartiré mi código también para aclaración. Primero, el popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { chrome.tabs.sendMessage(tabs[0].id, {message: scroll_time}, null); });donde scroll_time es una cadena que representa la marca de tiempo del video. En el archivo contentScript se encuentra el siguiente código:
var sec = parseInt(request.message); document.getElementById("movie_player").seekTo(sec, true);También probé el siguiente código en el archivo 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}); }); });con el siguiente código en un archivo aparte:
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); };En ambos métodos, obtengo el error descrito anteriormente. Deseo evitar el uso de la API del reproductor de YouTube para iframe Embeds , donde se describe la función seekTo. ¿Hay alguna forma de lograr esto sin la API, o es la única manera de usarla? Por favor, ayúdenme, ya que esto es lo último que quiero que mi extensión pueda hacer.
Probé esto en una ventana de youtube y funcionó:
document.getElementsByTagName('video')[0].currentTime = 20
No estoy seguro de si esto cubre todo lo que necesita o si funcionará como se esperaba, pero espero que sí :)