6

Mam rozszerzenie chrome z popup.html i wstrzyknięty skrypt zawartości. Za pomocą wstrzykiwanego skryptu zawartości próbuję uzyskać dostęp do funkcji JavaScript javascript youtube i wszystko działa poprawnie, z wyjątkiem jednego: addEventListener.addEventListener w skrypcie treści nie działa

Detektor zdarzeń z javascript API serwisu Youtube nasłuchuje, aby zmienić stan wideo. Więc jeśli koniec filmu osiągnięciu zmiany stanu 0.

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

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

Ten fragment kodu działa dobrze w normalnym środowisku, ale to nie działa w skrypcie treści. Dlaczego nie mogę uchwycić zmiany wydarzeń w moim skrypcie treści? Jakieś pomysły?

+0

możliwy duplikat [Budowania rozszerzenia Chrome z wydarzeniami w YouTube] (http://stackoverflow.com/questions/9515704/building-a-chrome-extension-with-youtube-events) –

Odpowiedz

7

Skrypty dotyczące zawartości wykonują , a nie działają w zakresie bieżącej strony. Moduł obsługi zdarzeń musi być podawany przez inną <script> tagu, jak opisano w tej odpowiedzi: 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. DOM jest dostępny dla skryptu treści, więc powiązanie obsługi zdarzeń działa.

+0

Zdecydowanie pytanie noob, ale jak wstawiasz kod z różnymi znakami w zmiennej actualCode? Chciałbym dodać adres URL (http://www.example.com), ale zwraca "nieoczekiwany ciąg". – jefvlamings

+0

@ user1279300 Zobacz odpowiedź połączoną, aby uzyskać więcej informacji, w tym wygodniejszą metodę dołączania kodu ("Metoda 1"). Po umieszczeniu kodu bezpośrednio w skrypcie, cudzysłowy, znaki nowej linii i inne znaki specjalne muszą zostać zmienione za pomocą odwróconego ukośnika. –

+0

Dzięki Rob. Przepraszam, jeśli cię denerwuję tymi pytaniami, ale tutaj jest jeszcze jeden. Tak naprawdę chcę, aby słuchacz zdarzeń komunikował się z resztą skryptu treści. Chcę wygenerować wygenerowany URL pod koniec filmu. Więc jeśli bieżący stan = 0 -> przejdź do adresu URL określonego w skrypcie treści. Czy istnieje sposób dynamicznego dodawania zmiennej do elementu "actualCode"? – jefvlamings

Powiązane problemy