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您可以将您的功能变化。

相关问题