Estoy desarrollando una extensión de Chrome para YouTube. La extensión escribe subtítulos alternativos con un comportamiento diferente. El archivo de subtítulos se toma de YouTube por el enlace.
Para poder mostrar los subtítulos cuando el video comience a reproducirse, tengo que descargar los archivos de los subtítulos antes de que se cargue el video. A baja velocidad de Internet, los archivos JSON de los subtítulos se cargan simultáneamente con la página de YouTube durante mucho tiempo.
Yo uso este enfoque. Para evitar que mi extensión compita con los scripts de YouTube, mi extensión:
window.stop() al comienzo de la carga de la página. Pero no me gustaría volver a cargar la página si hay entradas en window.history . Por supuesto, me gustaría bloquear el hilo de representación de la página, por ejemplo, mediante window.renderPause() y luego reanudarlo mediante window.renderResume() . No usaría window.stop() . Pero JavaScript no brinda esa oportunidad. ¿Cómo guardo el estado de la página con los resultados de ejecución de JavaScript y lo restauro más tarde? Este código no funciona para youtube. JavaScript de YouTube no se inicia.
let clonedHtml = document.documentElement.cloneNode(true); let clonedWindow = Object.assign({}, window); document.documentElement.innerHTML = ""; window = clonedWindow; document.replaceChild(clonedHtml, document.documentElement); No puedo usar window.history.back() o window.history.forward() porque window.stop() no permite cargar una página.
¿Desea evitar que el video comience antes de que se carguen los archivos de subtítulos? Restaurar el estado de la página en sí será muy complejo, no existe una solución genérica que funcione para todos los sitios web.
Para cargar sus subtítulos antes de que se carguen los scripts de YouTube:
Use [chrome.webRequest.onBeforeRequest][1] y reemplace la URL de subtítulos de YouTube con su propia URL de subtítulos (o reemplace el contenido del archivo después deRequest)
Consulte esta respuesta que engancha el evento de carga de la página donde puede buscar e inyectar sus subtítulos antes de que se cargue cualquier otra cosa.
Ambos métodos no requerirán una recarga de página adicional. [1]: https://developer.chrome.com/docs/extensions/reference/webRequest/