Chrome 扩展程序脚本:侦听任何类型的 URL 访问的更简单方法?

Chrome Extension scripts: simpler way to listen for any type of URL visit?

提问人:PlankTon 提问时间:4/26/2023 最后编辑:PlankTon 更新时间:4/26/2023 访问量:33

问:

更新:这是我的疏忽 - Tabs.onUpdated.addListener 确实在所有提到的事件上触发,我只是有一个隐藏的保护子句阻止它在 pushstate/pageload 上触发

我正在创建我的第一个 chrome 扩展(清单 v3),它通过后台服务工作者在某些 URL 上注入脚本。

我从 开始,然后才意识到tabs.onUpdate不侦听pushState事件。因此,如果我从使用 pushState 的链接到达,侦听器就不会触发。chrome.tabs.onUpdated.addListener

因此,我使用相同的逻辑添加了第二个侦听器。...笨拙,但它有效。chrome.webNavigation.onHistoryUpdated

然后我意识到,如果我在页面上点击重新加载,上述两个触发器和脚本都不会注入。

考虑到这种需求是多么普遍,我假设(d)会有一个简单的解决方案来监听URL(并触发JS / CSS插入),无论浏览器是通过初始加载,常规链接,pushState还是刷新到达URL......但是在搜索了文档(和堆栈溢出)之后,我没有找到任何简单的东西。

有人有什么想法吗?最佳实践真的是做一套不同的听众,还是我错过了一些明显的东西?

google-chrome-extension 推送状态

评论

1赞 wOxxOm 4/26/2023
chrome.tabs.onUpdated 会触发 pushState 和 tab 重新加载,因此您的代码中可能存在错误,或者您没有权限。如果要使用 chrome.webNavigation,通常需要三个事件:onCommitted(或 onCompleted)、onHistoryUpdated 和 onReferenceFragmentUpdated。OTOH 取决于您所做的工作,可能不需要所有这些,您可能只需注册一个内部使用的内容脚本。tabsnavigation.onnavigate
0赞 PlankTon 4/26/2023
@wOxxOm非常感谢 - 我回去再次梳理了一遍代码,并意识到如果 changeInfo.url 是 false,而不是 tab.info,我会在运行脚本之前返回。将结束这个 - 非常感谢

答:

0赞 PlankTon 4/26/2023 #1

更新:tabs.onUpdated 确实在所有需要的事件上运行。我面临的问题是我有一个针对changeInfo.url的保护子句,而不是tab.url。因为 changeInfo.url 仅在 url 实际更改时更新(而不是页面加载或推送状态),所以我的其余逻辑被丢弃了。