0

我試圖在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); 
}); 
+0

'chrome.tabs.onUpdated'足以捕捉包括歷史導航在內的所有網址更改,而'chrome.webNavigation.onHistoryStateUpdated'不會像'location.hash ='#newhash''直接URL哈希更改觸發。 – wOxxOm

+0

@ wOxxOm我明白了,但我需要檢測URL更改是否是由於後退/前進按鈕(如JavaScript重定向,點擊鏈接等) – boramalper

+0

嗯,你可以通過這種方式檢測「後退」按鈕導航,但我對前進按鈕不太確定:報告的transitionType是'link'。嗯,也許再加上transitionQualifier,你就可以推斷出這一點。另外,請確保使用[Firefox 48或更新版本](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/webNavigation/onHistoryStateUpdated)。 – wOxxOm

回答

1

無論是Chrome documentationWebExtensions documentation明確指出了webNavigation.onHistoryStateUpdated事件被觸發時, history API用於更改地址欄中的URL。也沒有聲明當用戶點擊轉發返回按鈕時觸發事件。

如果你想確定導航是用戶點擊的結果上向前,你需要聽webNavigation.onCommittedMDN事件。該信息可作爲包含在transitionQualifiers中的值"forward_back"MDN陣列。在這種情況下,transitionType似乎仍然是瀏覽器最初導航到該URL的方法。

相關問題