2015-04-23 34 views
2

我正在製作一個擴展模塊,它與從YouTube.com加載的頁面進行交互。我想在頁面上將相關視頻從最大到最小重新排序,但我的內容腳本必須先與背景頁面交談以獲取一些信息。

content_script.js:我的內容腳本由以下事件開始排序

$(document).ready(function() { 
    chrome.runtime.sendMessage({message: "getRecentSortType"}, function(response) { 
     PerformSortAction(response.sortType); 
    }); 
}); 

的background.js腳本監聽,並根據斷碼的要求執行:

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { 
    if(request.message === "getRecentSortType") 
    { 
     var recentSortType = localStorage.getItem("sortType"); 
     if(recentSortType === null) 
     { 
      recentSortType = "sortByViews"; 
     } 

     sendResponse({"sortType": recentSortType}); 
    } 
}); 

當我在重新加載我所在的頁面時運行此操作,所有這些都可以正常工作。但是,當我點擊YouTube中的相關視頻時,$(document).ready()事件不會在內容腳本中被觸發。如果我再次刷新該頁面,那麼它就可以工作。

有人可以向我解釋發生了什麼事嗎?我真的希望在內容腳本中有一些事件在頁面完成加載時觸發。

現在我有我的background.js腳本使用chrome.tabs.onUpdated事件進行偵聽,然後向我的內容腳本發送消息,但是onUpdated事件每次頁面加載時都會發生一次以上,從而搞亂了消息傳遞。

+1

當您轉到相關視頻時,Youtube不會加載新頁面......它正在執行加載新視頻的ajax請求。所以已經準備好的文件仍然準備好。 –

+0

所以你基本上想弄清楚如何聽Ajax事件完成......有很多可能性,這取決於Youtube如何做到這一點。 –

+0

或者您可以每半秒查看一次相關視頻列表,如果列表發生了變化,或者沿着這些線路進行了操作,請執行此操作。 –

回答

-1

您必須使用Jquery .on()方法來綁定事件。

相關問題