仅当用户更改URL时如何触发事件?

Pra*_*kar 3 javascript jquery google-chrome-extension angularjs firefox-addon-webextensions

我正在使用Chrome扩展程序,我想检测用户何时输入URL。我知道:

chrome.tabs.onUpdated.addListener(eventLisenerObj.onUpdated);
Run Code Online (Sandbox Code Playgroud)

但是,只要URL更改(例如,页面自动重新加载或用户单击链接等),它就会被调用。

我希望能够仅通过用户输入URL来确定URL是否已更改。

Mak*_*yen 5

您可以使用MDN事件获取此信息。事件侦听器接收属性MDN,该属性根据导航的原因将是不同的值MDN。您触发的值将完全取决于您想要的内容。对于你的描述,你可能会想MDN,但也有可能MDNMDN和/或MDNwebNavigation.onCommittedtransitionType'typed''generated''keyword''keyword_generated'

可能的值列表在Chrome的“ History API”页面上进行了webNavigation说明(它们在Chrome 页面上列出,但未在此处进行说明)(在MDN:上TransitionType)(Chrome History API页面上的文字):

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

为了区分某些过渡类型,除了这些transitionType值之外,您还需要查看MDN。可能的值是(来自Chrome文档在MDN上有一些不同的描述):TransitionQualifier

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