6

Tôi có tiện ích mở rộng chrome với popup.html và tập lệnh nội dung được chèn. Với tập lệnh nội dung được chèn vào, tôi đang cố truy cập các chức năng API javascript của youtube và tất cả đều hoạt động tốt ngoại trừ một: addEventListener.addEventListener trong tập lệnh nội dung không hoạt động

Trình xử lý sự kiện API javascript của Youtube lắng nghe trạng thái video thay đổi. Vì vậy, nếu phần cuối của video được chuyển đến trạng thái thay đổi thành 0.

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

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

Đoạn mã này hoạt động tốt trong môi trường bình thường nhưng không hoạt động trong tập lệnh nội dung. Tại sao tôi không thể bắt các sự kiện thay đổi trong tập lệnh nội dung của mình? Bất kỳ ý tưởng?

+0

bản sao có thể có của [Xây dựng tiện ích mở rộng của Chrome với sự kiện Youtube] (http://stackoverflow.com/questions/9515704/building-a-chrome-extension-with-youtube-events) –

Trả lời

7

Tập lệnh nội dung làm không phải chạy trong phạm vi trang hiện tại. Xử lý sự kiện phải được tiêm qua một thẻ <script>, như mô tả trong câu trả lời này: 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 có sẵn cho tập lệnh nội dung, vì vậy việc ràng buộc trình xử lý sự kiện sẽ hoạt động.

+0

Chắc chắn là câu hỏi noob nhưng cách thế nào để bạn chèn mã với các ký tự khác nhau trong biến actualCode? Tôi muốn thêm một url (http://www.example.com) nhưng nó trả về "chuỗi bất ngờ". – jefvlamings

+0

@ user1279300 Xem câu trả lời được liên kết để biết thêm chi tiết, bao gồm một phương pháp tiện lợi hơn để bao gồm mã ("Phương pháp 1"). Khi bạn đặt mã trực tiếp trong tập lệnh, dấu ngoặc kép, dòng mới và các ký tự đặc biệt khác phải được thoát bằng dấu gạch chéo ngược. –

+0

Cảm ơn Rob. Tôi xin lỗi nếu tôi làm phiền bạn với những câu hỏi này nhưng đây là một câu hỏi khác. Tôi thực sự muốn người nghe sự kiện giao tiếp với phần còn lại của tập lệnh nội dung. Tôi muốn một URL được tạo để mở ở cuối video. Vì vậy, nếu hiện tại nhà nước = 0 -> đi đến một URL được chỉ định trong kịch bản nội dung. Có cách nào để tự động thêm biến vào phần "actualCode" không? – jefvlamings

Các vấn đề liên quan