6

Ho un'estensione chrome con popup.html e uno script di contenuto iniettato. Con lo script di contenuto iniettato sto provando ad accedere alle funzioni API di javascript di youtube e tutto funziona bene tranne uno: addEventListener.addEventListener nello script di contenuto non funzionante

L'ascoltatore di eventi dell'API javascript di YouTube ascolta lo stato del video da modificare. Quindi, se il fine del video si raggiunge lo stato cambia a 0.

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

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

Questo pezzo di codice funziona bene in un ambiente normale, ma non riesce a lavorare in script contenuti. Perché non riesco a rilevare gli eventi che cambiano nel mio script di contenuto? Qualche idea?

+0

possibile duplicato di [Costruire un'estensione Chrome con YouTube Eventi] (http://stackoverflow.com/questions/9515704/building-a-chrome-extension-with-youtube-events) –

risposta

7

Gli script di contenuto sono non eseguiti nell'ambito della pagina corrente. Il gestore di eventi deve essere iniettato tramite un altro <script> tag, come descritto in questa risposta: 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. Il DOM è disponibile per lo script di contenuto, quindi il gestore di eventi funziona correttamente.

+0

Sicuramente una domanda niubbo ma come inserisci codice con caratteri diversi nella variabile actualCode? Vorrei aggiungere un URL (http://www.example.com) ma restituisce "Stringa inaspettata". – jefvlamings

+0

@ user1279300 Vedere la risposta collegata per maggiori dettagli, incluso un metodo più conveniente per includere il codice ("Metodo 1"). Quando inserisci il codice direttamente nello script, le virgolette, i newline e altri caratteri speciali devono essere sottoposti a escape utilizzando una barra rovesciata. –

+0

Grazie Rob. Mi dispiace se ti disturbo con queste domande, ma eccone un'altra. In realtà desidero che il listener di eventi comunichi con il resto dello script di contenuto. Voglio un URL generato da aprire alla fine del video. Quindi se lo stato corrente = 0 -> vai a un URL specificato nello script di contenuto. C'è un modo per aggiungere dinamicamente una variabile al pezzo "actualCode"? – jefvlamings

Problemi correlati