Google chrome extension Google Chrome extensions webNavigation API';s URL筛选器是否支持否定?

Google chrome extension Google Chrome extensions webNavigation API';s URL筛选器是否支持否定?,google-chrome-extension,Google Chrome Extension,似乎它本身不支持否定,例如它有hostContains或urlContains,但它没有hostNotConatins等。所以我求助于使用正则表达式,现在让我惊讶的是,当我使用时正则表达式否定,Chrome无法添加侦听器并返回错误: chrome.webNavigation.onHistoryStateUpdated.addListener(function(){ chrome.tabs.executeScript({ file: 'js/contentScript.js

似乎它本身不支持否定,例如它有
hostContains
urlContains
,但它没有
hostNotConatins
等。所以我求助于使用正则表达式,现在让我惊讶的是,当我使用
正则表达式否定,Chrome无法添加侦听器并返回错误:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(){
    chrome.tabs.executeScript({
        file: 'js/contentScript.js'
    });
},{url: [{urlMatches: "/(?!(downloads))"}]});
为什么会这样?为什么他们限制我们在URL过滤器上可以做什么?JS本机支持Regex
否定


还是我做错了?有什么解决办法吗?

用户wOxxOm在评论中回答了我的问题,我希望他能在最后写一个答案,这样我可以将这个问题标记为已回答,但他没有,所以我不得不复制他的答案:

如果内置的url过滤器不够,则
webNavigation
侦听器的回调函数有一个对象参数,该函数保存页面的url,您可以对其进行如下筛选:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(obj){
    if (obj["url"].search(/twitch.tv[\/](?!(directory|downloads|friends|inventory|jobs|p|payments|settings|subscriptions|turbo))/) > 0){
        chrome.tabs.executeScript({
            file: 'js/twitchContentScript2.js'
        });
    }
},{url: [{hostSuffix: "twitch.tv", urlMatches: "((.+://)?(www\.)?twitch.tv/.+$)"}]});
以下是文档的注释,如果有人认为这是不必要的,请通过编辑让我知道:


无法在筛选器中使用排除。作为文件 也就是说,API使用RE2语法,它没有消极的前瞻性 出于性能原因–wOxxOm 1月12日17:07


我正在考虑使用
location.href.search(/[\/](?!(下载))/)
来自后台脚本,但我无权访问
location.href
在那里,我想也许我可以使用chrome.runtime.sendMessage 将
contentScript
添加到后台脚本,但它不起作用。所以我 不知道我有什么选择,你知道吗?谢谢–Shayan Jan 18点45分12点


请参阅文档:侦听器接收带有url的详细信息参数 内部.–wOxxOm 1月12日18:54


你是说
chrome.tabs.onUpdate
?但我使用的是内容脚本 在清单中声明,并使用
webNavigation
重新注入它们, 使用更新的
onUpdated
会破坏整点。或者你是什么意思 还有什么沙岩1月12日19:00


为什么不更新?我指的当然是你代码中的听者沃克索姆 1月12日19:02


无法在筛选器中使用排除。正如文档所述,API使用RE2语法,出于性能原因,它没有负面的前瞻性。我想从后台脚本使用
location.href.search(/[\/](?!(下载))/),但我没有访问
location.href`的权限,所以我想也许我可以使用
chrome.runtime.sendMessage
从contentScript到后台脚本,但它不起作用。所以我不知道我有什么选择,你知道吗?感谢查看文档:侦听器接收到一个包含url的详细参数。您的意思是
chrome.tabs.onUpdate
?但我正在使用manifest中声明的内容脚本,并使用webNavigation重新注入它们,使用
onUpdated
打破了这一点。或者你是说别的?为什么不更新?我指的当然是你代码中的听者。