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
打破了这一点。或者你是说别的?为什么不更新?我指的当然是你代码中的听者。