我試圖在WebExtensions擴展中使用chrome.tabs
來捕獲webNavigation.onHistoryStateUpdated
。從後臺頁面捕獲所有選項卡的歷史狀態已更新事件
的問題是,我能趕上onHistoryStateUpdated
事件只爲我創造了聽從onHistoryStateUpdated
事件的所有其他選項卡持久背景頁!
tabs.onUpdated
事件從背景頁面完美地工作,但不是onHistoryStateUpdated
- 這是至關重要的,因爲我必須捕捉瀏覽器後退/前進事件。
的manifest.json
{
"manifest_version": 2,
"browser_action": {
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"background": {
"page": "background.html",
"persistent": true
},
"permissions": [
"tabs",
"webNavigation"
]
}
background.js
// Works not... (i.e. is not fired)
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
console.log("tabid", tabId);
});
// WORKS!
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
console.log("Tab #" + tabId, " has its URL to: (" + changeInfo.status + ")");
console.log("\t" + changeInfo.url);
});
'chrome.tabs.onUpdated'足以捕捉包括歷史導航在內的所有網址更改,而'chrome.webNavigation.onHistoryStateUpdated'不會像'location.hash ='#newhash''直接URL哈希更改觸發。 – wOxxOm
@ wOxxOm我明白了,但我需要檢測URL更改是否是由於後退/前進按鈕(如JavaScript重定向,點擊鏈接等) – boramalper
嗯,你可以通過這種方式檢測「後退」按鈕導航,但我對前進按鈕不太確定:報告的transitionType是'link'。嗯,也許再加上transitionQualifier,你就可以推斷出這一點。另外,請確保使用[Firefox 48或更新版本](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webNavigation/onHistoryStateUpdated)。 – wOxxOm