2

我正在使用Chrome擴展程序,我想檢測用戶何時鍵入了URL。我知道:如何僅在用戶更改URL時觸發事件?

chrome.tabs.onUpdated.addListener(eventLisenerObj.onUpdated); 

但是,每當URL改變它被調用(例如,當頁面重新加載自動或用戶點擊一個鏈接等)

我渴望能確定只有用戶輸入URL才能更改URL。

+0

請注意,接受的答案**技術也可以在Firefox **上工作。 –

回答

4

您可以使用webNavigation.onCommittedMDN事件得到這個信息。事件監聽器接收屬性transitionTypeMDN,這將different valuesMDN)基於導航的原因是。你觸發哪些值取決於究竟是你所期望的。對於你的描述,你可能會想'typed'MDN,但可能也'generated'MDN'keyword'MDN和/或'keyword_generated'MDN。 (文從Chrome歷史API頁):

可能值的列表上Chrome的History API page(它們列出的鍍鉻webNavigation頁上,但不是有解釋)(TransitionType在MDN)解釋

  • "link"
    用戶通過單擊其他頁面上的鏈接來到此頁面。
  • "typed"
    用戶通過在地址欄中輸入網址來獲得此頁面。也用於其他明確的導航操作。另請參閱generatedMDN,用於用戶選擇看起來完全不像URL的情況。
  • "auto_bookmark"
    用戶通過UI中的建議(例如,通過菜單項)進入此頁面。
  • "auto_subframe"
    子框架導航。這是自動加載到非頂級框架中的任何內容。例如,如果某個網頁由多個包含廣告的框架組成,則這些廣告網址具有此轉換類型。用戶甚至可能沒有意識到在這些網頁上的內容是一個獨立的框架,因此可能不關心URL(另見manual_subframeMDN)。
  • "manual_subframe"
    對於用戶明確請求的子幀導航並在後退/前進列表中生成新的導航條目。明確請求的幀可能比自動加載的幀更重要,因爲用戶可能關心請求的幀被加載的事實。
  • "generated"
    用戶通過在地址欄中輸入並選擇一個看起來不像URL的條目來到此頁面。例如,匹配可能包含Google搜索結果頁的網址,但用戶可能會將其視爲「搜索Google for ...」。這些並不完全相同typedMDN導航因爲用戶沒有輸入或看到目標URL。另請參見keywordMDN
  • "auto_toplevel"
    頁面在命令行中指定或者是起始頁面。
  • "form_submit"
    用戶填寫表單中的值並提交。請注意,在某些情況下(例如表單使用腳本提交內容時),提交表單不會導致此轉換類型。
  • "reload"
    用戶通過單擊重新加載按鈕或通過在地址欄中按Enter重新加載頁面。會話恢復和重新打開關閉選項卡也使用此轉換類型。
  • "keyword"
    該URL是由可替換的關鍵字而非默認搜索提供程序生成的。另請參見keyword_generatedMDN
  • "keyword_generated"
    對應於爲關鍵字生成的訪問。另請參見keywordMDN

爲了區分某些類型的轉變,除了transitionType值,你也想看看TransitionQualifierMDN。可能的值是(從Chrome documentation,這是有些不同on MDN描述):

  • "client_redirect"
    一個或多個頁面上引起的JavaScript或元刷新標記重定向導航過程中發生的。
  • "server_redirect"
    導航過程中發生服務器發送的HTTP標頭導致的一個或多個重定向。
  • "forward_back"
    用戶使用Forward或Back按鈕來啓動導航。
  • "from_address_bar"
    用戶從地址欄(又名Omnibox)發起導航。
+0

感謝隊友它完美的工作。官方文檔可在這裏[鏈接](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」]' –

+1

@BrockAdams我完全支持對於Chrome擴展程序/ Firefox WebExtensions(以及Edge,Opera等)而言,問題/答案是跨瀏覽器的目標。我會更新這個答案中的所有鏈接(以及一些文本),並且還有一個MDN目標,就像我在其他答案中所做的一樣。目前我正在通過其他一些方式工作,但應該是今天。 – Makyen

+0

我在等你的回答 –

-1

你可以看看$locationChangeSuccess

你可以得到這樣的路徑:

var loc = $location.path(); 

然後對loc您可以將您的功能變化。

相關問題