我正在使用Chrome擴展程序,我想檢測用戶何時鍵入了URL。我知道:如何僅在用戶更改URL時觸發事件?
chrome.tabs.onUpdated.addListener(eventLisenerObj.onUpdated);
但是,每當URL改變它被調用(例如,當頁面重新加載自動或用戶點擊一個鏈接等)
我渴望能確定只有用戶輸入URL才能更改URL。
我正在使用Chrome擴展程序,我想檢測用戶何時鍵入了URL。我知道:如何僅在用戶更改URL時觸發事件?
chrome.tabs.onUpdated.addListener(eventLisenerObj.onUpdated);
但是,每當URL改變它被調用(例如,當頁面重新加載自動或用戶點擊一個鏈接等)
我渴望能確定只有用戶輸入URL才能更改URL。
您可以使用webNavigation.onCommitted
(MDN)事件得到這個信息。事件監聽器接收屬性transitionType
(MDN),這將different values(MDN)基於導航的原因是。你觸發哪些值取決於究竟是你所期望的。對於你的描述,你可能會想'typed'
(MDN),但可能也'generated'
(MDN),'keyword'
(MDN)和/或'keyword_generated'
(MDN)。 (文從Chrome歷史API頁):
:可能值的列表上Chrome的History API page(它們列出的鍍鉻
webNavigation
頁上,但不是有解釋)(TransitionType
在MDN)解釋
"link"
用戶通過單擊其他頁面上的鏈接來到此頁面。"typed"
用戶通過在地址欄中輸入網址來獲得此頁面。也用於其他明確的導航操作。另請參閱generated
(MDN),用於用戶選擇看起來完全不像URL的情況。"auto_bookmark"
用戶通過UI中的建議(例如,通過菜單項)進入此頁面。"auto_subframe"
子框架導航。這是自動加載到非頂級框架中的任何內容。例如,如果某個網頁由多個包含廣告的框架組成,則這些廣告網址具有此轉換類型。用戶甚至可能沒有意識到在這些網頁上的內容是一個獨立的框架,因此可能不關心URL(另見manual_subframe
(MDN))。"manual_subframe"
對於用戶明確請求的子幀導航並在後退/前進列表中生成新的導航條目。明確請求的幀可能比自動加載的幀更重要,因爲用戶可能關心請求的幀被加載的事實。"generated"
用戶通過在地址欄中輸入並選擇一個看起來不像URL的條目來到此頁面。例如,匹配可能包含Google搜索結果頁的網址,但用戶可能會將其視爲「搜索Google for ...」。這些並不完全相同typed
(MDN)導航因爲用戶沒有輸入或看到目標URL。另請參見keyword
(MDN)。"auto_toplevel"
頁面在命令行中指定或者是起始頁面。"form_submit"
用戶填寫表單中的值並提交。請注意,在某些情況下(例如表單使用腳本提交內容時),提交表單不會導致此轉換類型。"reload"
用戶通過單擊重新加載按鈕或通過在地址欄中按Enter重新加載頁面。會話恢復和重新打開關閉選項卡也使用此轉換類型。"keyword"
該URL是由可替換的關鍵字而非默認搜索提供程序生成的。另請參見keyword_generated
(MDN)。"keyword_generated"
對應於爲關鍵字生成的訪問。另請參見keyword
(MDN)。
爲了區分某些類型的轉變,除了transitionType
值,你也想看看TransitionQualifier
(MDN)。可能的值是(從Chrome documentation,這是有些不同on MDN描述):
"client_redirect"
一個或多個頁面上引起的JavaScript或元刷新標記重定向導航過程中發生的。"server_redirect"
導航過程中發生服務器發送的HTTP標頭導致的一個或多個重定向。"forward_back"
用戶使用Forward或Back按鈕來啓動導航。"from_address_bar"
用戶從地址欄(又名Omnibox)發起導航。
感謝隊友它完美的工作。官方文檔可在這裏[鏈接](https://developer.chrome.com/extensions/webNavigation)'var eventLisenerObj = {}; eventLisenerObj.onCommitted = function(oEvent) { \t console.log(「Dom Loaded」+ oEvent.transitionType); }; chrome.webNavigation.onCommitted.addListener(eventLisenerObj.onCommitted);'在background.js'上添加此代碼還在清單文件中添加權限'「permissions」:[「webNavigation」]' –
@BrockAdams我完全支持對於Chrome擴展程序/ Firefox WebExtensions(以及Edge,Opera等)而言,問題/答案是跨瀏覽器的目標。我會更新這個答案中的所有鏈接(以及一些文本),並且還有一個MDN目標,就像我在其他答案中所做的一樣。目前我正在通過其他一些方式工作,但應該是今天。 – Makyen
我在等你的回答 –
你可以看看$locationChangeSuccess
。
你可以得到這樣的路徑:
var loc = $location.path();
然後對loc
您可以將您的功能變化。
請注意,接受的答案**技術也可以在Firefox **上工作。 –