我正在使用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 **上工作。 –