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事件每次頁面加載時都會發生一次以上,從而搞亂了消息傳遞。
當您轉到相關視頻時,Youtube不會加載新頁面......它正在執行加載新視頻的ajax請求。所以已經準備好的文件仍然準備好。 –
所以你基本上想弄清楚如何聽Ajax事件完成......有很多可能性,這取決於Youtube如何做到這一點。 –
或者您可以每半秒查看一次相關視頻列表,如果列表發生了變化,或者沿着這些線路進行了操作,請執行此操作。 –