如何仅在用户更改 URL 时触发事件? [英] How to trigger an event only when the user changes the URL?

查看:42
本文介绍了如何仅在用户更改 URL 时触发事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开发 Chrome 扩展程序,我想检测用户何时输入了 URL.我知道:

I am working on a Chrome extension, I want to detect when the user has typed a URL. I know about:

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

但是,每当 URL 更改时(例如,当页面自动重新加载,或用户点击链接等)时,它就会被调用

But, it gets called whenever the URL is changed (e.g. when the page is auto reloads, or user clicks on a link, etc.)

我希望能够确定仅通过用户输入 URL 更改了 URL.

I desire to be able to determine that the URL was changed only by the user typing a URL.

推荐答案

您可以使用 webNavigation.onCommitted(MDN) 事件.事件侦听器接收一个属性 transitionType(MDN),即 不同的值(MDN) 基于导航的原因.您触发哪些值将取决于正是您想要什么.对于您所描述的内容,您可能需要 'typed'(MDN),但也可能'生成'(MDN), 'keyword'(MDN)和/或 'keyword_generated'(MDN).

You can get this information using the webNavigation.onCommitted(MDN) event. The event listener receives a property transitionType(MDN), which will be different values(MDN) based on the cause of the navigation. Which values you trigger on will depend on exactly what you are desiring. For what you describe, you will probably want 'typed'(MDN), but potentially also 'generated'(MDN), 'keyword'(MDN) and/or 'keyword_generated'(MDN).

Chrome 的 History API 页面 解释了可能的值列表(它们是在 Chrome webNavigation 页面上列出,但没有在那里解释)(在 MDN 上:TransitionType)(来自 Chrome History API 页面的文本):

The list of possible values is explained on Chrome's History API page (they are listed on the Chrome webNavigation page, but not explained there) (On MDN: TransitionType) (text from the Chrome History API page):

  • 链接"
    用户通过点击另一个页面上的链接进入此页面.
  • 输入"
    用户通过在地址栏中键入 URL 来获得此页面.也用于其他显式导航操作.另请参阅generated(MDN),用于用户选择的选项与 URL 完全不同的情况.
  • auto_bookmark"
    用户通过 UI 中的建议进入此页面 - 例如,通过菜单项.
  • auto_subframe"
    子帧导航.这是在非顶级框架中自动加载的任何内容.例如,如果一个页面由多个包含广告的框架组成,则这些广告 URL 具有这种过渡类型.用户甚至可能没有意识到这些页面中的内容是一个单独的框架,因此可能不关心 URL(另请参见 manual_subframe(MDN)).
  • manual_subframe"
    对于用户明确请求并在后退/前进列表中生成新导航条目的子帧导航.显式请求的帧可能比自动加载的帧更重要,因为用户可能关心请求的帧已加载这一事实.
  • 生成"
    用户通过在地址栏中键入并选择一个看起来不像 URL 的条目来访问此页面.例如,匹配项可能具有 Google 搜索结果页面的 URL,但对用户而言,它可能显示为在 Google 中搜索...".这些与 typed 不太一样(MDN) 导航,因为用户没有输入或看到目标 URL.另请参阅关键字(MDN).
  • auto_toplevel"
    该页面是在命令行中指定的或者是起始页面.
  • form_submit"
    用户在表单中填写值并提交.请注意,在某些情况下 - 例如当表单使用脚本提交内容时 - 提交表单不会导致这种转换类型.
  • 重新加载"
    用户通过单击重新加载按钮或在地址栏中按 Enter 重新加载页面.会话恢复和重新打开关闭的选项卡也使用这种转换类型.
  • 关键字"
    URL 是从默认搜索提供程序以外的可替换关键字生成的.另请参阅keyword_generated(MDN).
  • keyword_generated"
    对应于为关键字生成的访问.另请参阅关键字(MDN).

要区分某些类型的过渡,除了 transitionType 值外,您还需要查看 TransitionQualifier(MDN).可能的值是(来自 Chrome 文档,对在 MDN 上):

To differentiate some types of transitions, in addition to the transitionType values, you will also want to look at the TransitionQualifier(MDN). The possible values are (from the Chrome documentation, which are described somewhat differently on MDN):

  • client_redirect"
    导航期间发生了由 JavaScript 或页面上的元刷新标记引起的一次或多次重定向.
  • server_redirect"
    导航期间发生了由服务器发送的 HTTP 标头引起的一次或多次重定向.
  • forward_back"
    用户使用前进或后退按钮启动导航.
  • from_address_bar"
    用户从地址栏(又名多功能框)启动导航.

这篇关于如何仅在用户更改 URL 时触发事件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆