6

我有一個帶有popup.html和注入內容腳本的Chrome擴展。通過注入的內容腳本,我試圖訪問YouTube的JavaScript API函數,除了一個以外,它都可以正常工作:addEventListener。內容腳本中的addEventListener不起作用

Youtube的JavaScript API的事件偵聽器偵聽要更改的視頻狀態。因此,如果達到了視頻末尾的狀態變爲0

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

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

這段代碼工作得很好,在一個正常的環境,但它不能在內容腳本工作。爲什麼我無法在內容腳本中捕捉更改事件?有任何想法嗎?

+0

[使用Youtube事件構建Chrome擴展]可能的重複(http://stackoverflow.com/questions/9515704/building-a-chrome-extension-with-youtube-events) – 2012-03-19 20:36:26

回答

7

內容腳本做不是運行在當前頁面的範圍內。事件處理程序通過另一個<script>標籤被注入,在這個答案說明: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可用於內容腳本,因此綁定事件處理程序確實可行。

+0

絕對是一個noob問題,但如何你在actualCode變量中插入不同字符的代碼?我想添加一個url(http://www.example.com),但它返回「Unexpected string」。 – jefvlamings 2012-03-20 07:36:56

+0

@ user1279300查看鏈接的答案以獲取更多詳細信息,包括更方便的方法以包含代碼(「方法1」)。將代碼直接放在腳本中時,必須使用反斜線來轉義引號,換行符和其他特殊字符。 – 2012-03-20 12:02:15

+0

感謝羅布。如果我對這些問題感到惱火,但是這裏有另外一個問題,我很抱歉。我實際上希望事件偵聽器與內容腳本的其餘部分進行通信。我想要在視頻結尾處打開生成的網址。所以如果當前狀態= 0 - >轉到在內容腳本中指定的URL。有沒有辦法動態地將變量添加到「actualCode」片段中? – jefvlamings 2012-03-20 14:07:32