当前位置: 首页 > 面试题库 >

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

娄德运
2023-03-14
问题内容

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

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

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

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


问题答案:

您可以使用(MDN)事件获取此信息。事件侦听器接收属性(MDN),该属性根据导航的原因将是不同的值(MDN)。哪个值,您触发将取决于 正是
您所渴望的东西。对于你的描述,你可能会想(MDN),但也有可能(MDN),(MDN)和/或(MDN)。webNavigation.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。另请参阅(MDN)。typedkeyword
* "auto_toplevel"
该页面是在命令行中指定的,或者是起始页面。
* "form_submit"
用户在表单中填写值并提交。请注意,在某些情况下(例如,当表单使用脚本提交内容时),提交表单不会导致这种过渡类型。
* "reload"
用户通过单击重新加载按钮或在地址栏中按Enter来重新加载页面。会话还原和“重新打开已关闭”选项卡也使用此过渡类型。
* "keyword"
该URL是从默认搜索提供程序以外的可替换关键字生成的。另请参阅(MDN)。keyword_generated
* "keyword_generated"
对应于为关键字生成的访问。另请参阅(MDN)。keyword

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

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


 类似资料:
  • 目前我在主干中有这个功能。 它会在触发onChange事件时更新模型。 我正在使用react的datepicker组件在这个模型中添加一个日期字段,但是主干的这个函数在我选择日期时不会触发onChange事件。这是一个组件:https://github.com/Hacker0x01/react-datepicker 在我的组件中,我手动触发了“更改”事件 这很好,但当我在datepicker中选择

  • 问题内容: 我想要类似的东西: 问题答案: 类更改时不会引发任何事件。另一种方法是在以编程方式更改类时手动引发事件: 更新 这个问题似乎正在吸引一些访问者,因此这里是一种更新方法,可以使用该方法而不必使用new修改现有代码: 请注意,只能用于更新的浏览器,特别是Chrome 26,FF 14,IE 11,Opera 15和Safari6。如果需要支持旧版浏览器,则需要使用我在第一个示例中概述的方法

  • 问题内容: 如何告诉Jenkins / Hudson仅针对Git树中特定项目的更改触发构建? 问题答案: Git插件有一个选项(排除的区域),可使用正则表达式根据提交中的文件是否与排除的区域正则表达式匹配来确定是否跳过构建。 不幸的是,当前的Git插件目前没有“包含区域”功能(1.15)。但是,有人在GitHub上发布了可在Jenkins和Hudson上运行的补丁,这些补丁实现了所需的功能。 构建

  • 问题内容: 仅在真正更改数据的情况下,才有可能使用“更新后”触发器。我知道“新旧”。但是使用它们时,我只能比较列。例如“ NEW.count <> OLD.count”。 但我想要类似的东西:如果“ NEW <> OLD”,则运行触发器 一个例子: 关键是,有一个更新,但是 什么都没有改变 。但是无论如何,触发器都在运行。恕我直言,应该有一个没有的方法。 我知道我可以使用 如果现在b <> OLD

  • 问题内容: 我有一个div,其内容可能会以各种方式更改:例如,可以通过innerHTML重新加载其整个内容,或者可以通过DOM方法添加节点。反过来,这可能是通过本地javascript发生的,也可能是通过调用jQuery API或其他库间接发生的。 我希望在div的内容改变为执行一些代码,但我 绝对没有控制 上 如何 将改变。确实,我正在设计一个可供其他人使用的小部件,他们可以自由选择自己喜欢的d

  • 我制作了一个滑块,它的额外功能是允许用户轻松地将其设置为精确的中心。试试看它是如何在中间停止的,但是如果你继续拖着它穿过停止区或者拖拽它,你可以在任何地方滑动它。 如果用户将滑块旋钮拖动到中点并释放鼠标,那么“粘性”应该被移除,这样当用户再次开始拖动时,它就不会开始“卡住”。 问题是,如果用户将其滑离起始点的中点,然后将其滑回中点,事件将不会触发,因为最终值实际上没有改变。 我尝试使用/而不是,但