6

Tengo una extensión de Chrome con un popup.html y un script de contenido inyectado. Con el script de contenido inyectado, intento acceder a las funciones de la API de JavaScript de youtube y todo funciona bien, excepto uno: addEventListener.addEventListener en el script de contenido no funciona

El detector de eventos de la API de JavaScript de Youtube escucha el estado del video para cambiar. Así que si el final del video se alcanza el estado cambia a 0.

var currentVideo = document.getElementById('movie_player'); 
currentVideo.addEventListener("onStateChange", "onytplayerStateChange"); 

function onytplayerStateChange() { 
    console.log("The state of the player has changed"); 
} 

Esta pieza de código funciona bien en un ambiente normal, pero no puede trabajar en la escritura de contenido. ¿Por qué no puedo ver el cambio de eventos en mi script de contenido? ¿Algunas ideas?

+0

posible duplicado de [Crear una extensión de Chrome con eventos de Youtube] (http://stackoverflow.com/questions/9515704/building-a-chrome-extension-with-youtube-events) –

Respuesta

7

Las secuencias de comandos de contenido no se ejecutan en el alcance de la página actual. El controlador de eventos tiene que ser inyectada a través de otra etiqueta <script>, como se describe en esta respuesta: Building a Chrome Extension with Youtube Events:

var actualCode = 'function onytplayerStateChange() {' 
       + ' console.log("The state of the player has changed");' 
       + '}'; 

var script = document.createElement('script'); 
script.textContent = actualCode; 
(document.head||document.documentElement).appendChild(script); 
script.parentNode.removeChild(script); 

PS. El DOM está disponible para el script de contenido, por lo que el vinculador del controlador de eventos funciona.

+0

Definitivamente una pregunta de novato pero cómo ¿Insertas código con diferentes caracteres en la variable de código real? Me gustaría agregar una url (http://www.example.com) pero devuelve "Cadena inesperada". – jefvlamings

+0

@ user1279300 Consulte la respuesta vinculada para obtener más información, incluido un método más conveniente para incluir código ("Método 1"). Cuando coloca el código directamente en la secuencia de comandos, las comillas, las líneas nuevas y otros caracteres especiales deben escaparse con una barra diagonal inversa. –

+0

Gracias Rob. Lo siento si te molesto con estas preguntas, pero aquí hay otra. De hecho, quiero que el oyente del evento se comunique con el resto del script de contenido. Quiero que se abra una URL generada al final del video. Entonces, si el estado actual = 0 -> vaya a una URL especificada en el script de contenido. ¿Hay alguna manera de agregar dinámicamente una variable en la pieza "realCode"? – jefvlamings

Cuestiones relacionadas