每次访问 url 匹配模式时,在 chrome 扩展程序的后台脚本中添加一个监听器到 webNavigation
Adding a listener to webNavigation, in a chrome extension's background script everytime a url matching a pattern is visited
我正在尝试在 chrome 扩展的 background.js
文件中添加一个侦听器。
我希望这个监听器最好只针对 url 的匹配进行过滤,例如 netflix.com/watch/
首先,我尝试 chrome.webNavigation.onCompleted.addListener
(link),为所需的 netflix URL 提供适当的过滤器。但是,我观察到如果通过浏览器的前进或后退按钮导航到 URL,则不会触发此侦听器。此外,如果导航源自在同一域的网页上单击 link(即:在浏览或搜索时单击 Netflix 视频(将您从 netflix.com/browse 到目标 netflix。com/watch URL)).
然后我尝试了 chrome.tabs.onUpdated
(link)。此事件通过 backward/forward 按钮触发,并且在从同一域的页面导航时也会触发,但在刷新同一页面时不会触发(因为在这种情况下选项卡不会更改)。最好我也想处理刷新案例。
我可以使用两个侦听器来弥补每个侦听器的遗漏,但有些情况下两个侦听器会同时触发,这是不可取的。
是否有我可以监听的事件将涵盖我描述的所有情况?
chrome.tabs.onUpdated 实际上在刷新选项卡时触发,因此您的代码不正确。我想它会寻找刷新时未提供的 changeInfo.url。
同时查看 status
并使用 tab
参数中的 url
或 pendingUrl
:
chrome.tabs.onUpdated.addListener((tabId, info, tab) => {
if (info.url || info.status === 'loading') {
const url = info.url || tab.pendingUrl || tab.url;
console.log(url); // prints in the *background* console
}
});
对于 webNavigation 具有 SPA(单页应用程序)的网站,例如 netflix/youtube,您需要监听更多事件:onHistoryStateUpdated、onReferenceFragmentUpdated。
我正在尝试在 chrome 扩展的 background.js
文件中添加一个侦听器。
我希望这个监听器最好只针对 url 的匹配进行过滤,例如 netflix.com/watch/
首先,我尝试 chrome.webNavigation.onCompleted.addListener
(link),为所需的 netflix URL 提供适当的过滤器。但是,我观察到如果通过浏览器的前进或后退按钮导航到 URL,则不会触发此侦听器。此外,如果导航源自在同一域的网页上单击 link(即:在浏览或搜索时单击 Netflix 视频(将您从 netflix.com/browse 到目标 netflix。com/watch URL)).
然后我尝试了 chrome.tabs.onUpdated
(link)。此事件通过 backward/forward 按钮触发,并且在从同一域的页面导航时也会触发,但在刷新同一页面时不会触发(因为在这种情况下选项卡不会更改)。最好我也想处理刷新案例。
我可以使用两个侦听器来弥补每个侦听器的遗漏,但有些情况下两个侦听器会同时触发,这是不可取的。
是否有我可以监听的事件将涵盖我描述的所有情况?
chrome.tabs.onUpdated 实际上在刷新选项卡时触发,因此您的代码不正确。我想它会寻找刷新时未提供的 changeInfo.url。
同时查看 status
并使用 tab
参数中的 url
或 pendingUrl
:
chrome.tabs.onUpdated.addListener((tabId, info, tab) => {
if (info.url || info.status === 'loading') {
const url = info.url || tab.pendingUrl || tab.url;
console.log(url); // prints in the *background* console
}
});
对于 webNavigation 具有 SPA(单页应用程序)的网站,例如 netflix/youtube,您需要监听更多事件:onHistoryStateUpdated、onReferenceFragmentUpdated。