Estoy creando una extensión de Chrome simple que muestra un aviso al ingresar a ciertos sitios web. Mi principal sería Youtube. Aquí está el código que tengo hasta ahora:
if(window.location.hostname ==="www.youtube.com") { let why = prompt("Why are you on Youtube/Watching this video?", ""); };Esto funciona bien al ingresar a YouTube por primera vez, al actualizar una página o al retroceder una página usando la flecha hacia atrás. Sin embargo, me gustaría que apareciera cada vez que hago clic en un video o cambio de página (por ejemplo, al pasar de la pestaña Recomendados a la pestaña Suscripciones). ¿Cómo puedo hacer esto?
EDITAR: Encontré un código que funciona en esta pregunta: Detectar el cambio de video de Youtube con javascript inyectado Aquí está mi código final:
function run(){ if(window.location.hostname ==="www.youtube.com") { let why = prompt("Why are you on Youtube/Watching this video?", ""); }; } window.onload = run; window.addEventListener('yt-navigate-start', run, true);Youtube es una aplicación de página única (SPA), por lo que la página no se vuelve a cargar cuando se hace clic en un video. Puedes leer más sobre esto aquí .
El código que publicaste solo se ejecuta cuando se carga la página, y eso sucede, como ya notaste, cuando abres YouTube por primera vez o actualizas la página.
Tal vez puedas intentar escuchar los cambios de título, que cambian en cada video y página, usando este fragmento de código que obtuve de este hilo .
new MutationObserver(function(mutations) { console.log(mutations[0].target.nodeValue); }).observe( document.querySelector('title'), { subtree: true, characterData: true, childList: true } );