如何在JavaScript中只定义一次变量,而不是在后台脚本的每个循环上。chrome扩展

如何在JavaScript中只定义一次变量,而不是在后台脚本的每个循环上。chrome扩展,javascript,html,variables,google-chrome-extension,var,Javascript,Html,Variables,Google Chrome Extension,Var,我最近正在构建一个chrome扩展,因此我有一个广告拦截器,所以我创建了启用和禁用它的选项,但我遇到了一个问题,我无法定义过滤器…… 在下面的代码中,我如何定义过滤器仅一次,而不是在每个循环上 const defaultFilters=[ “*://*.doubleclick.net/*”, “*://partner.googleadservices.com/*”, ... “*://*.zukxd6fkxqn.com/*”, “*://*.zy16eoat1w.com/*”, ] var过滤

我最近正在构建一个chrome扩展,因此我有一个广告拦截器,所以我创建了启用和禁用它的选项,但我遇到了一个问题,我无法定义过滤器……

在下面的代码中,我如何定义
过滤器
仅一次,而不是在每个循环上

const defaultFilters=[
“*://*.doubleclick.net/*”,
“*://partner.googleadservices.com/*”,
...
“*://*.zukxd6fkxqn.com/*”,
“*://*.zy16eoat1w.com/*”,
]
var过滤器=过滤器;
chrome.extension.onConnect.addListener(函数(端口){
port.onMessage.addListener(函数(msg){
var Filter=defaultFilters;
如果(msg='ADBLOCK_ENABLED'){
var Filter=defaultFilters;
}否则{
变量过滤器=[''];
}
});
})
chrome.webRequest.onBeforeRequest.addListener(
函数(详细信息){return{cancel:true}},
{url:Filter},
[“封锁”]
)

=
是赋值,
=
==
是比较

您需要定义一次过滤器,并在需要的地方分配-在这里,三元值是有用的

const defaultFilters=[
“*://*.doubleclick.net/*”,
“*://partner.googleadservices.com/*”,
...
“*://*.zukxd6fkxqn.com/*”,
“*://*.zy16eoat1w.com/*”,
]
var Filter=defaultFilters;//现在是一个全局变量
chrome.extension.onConnect.addListener(函数(端口){
port.onMessage.addListener(函数(msg){
Filter=msg=='ADBLOCK_ENABLED'?defaultFilters:[''];//如果ADBLOCK
});
})
chrome.webRequest.onBeforeRequest.addListener(
功能(详情){
返回{
取消:对
}
}, {
URL:过滤器
},[“阻塞”]
)

没有循环。您正在连接一个侦听器,该侦听器可以在任何时间点、任何次数触发。我显示的是,onBeforeRequest可能在onConnect之前运行。更改
var过滤器
var Filter=defaultFilters
我尝试在
var Filter=defaultFilters之后添加
,而(true){}
直到代码结束。我儿子被吊死了,停止了工作,这样做毫无意义。事件监听器一直在运行,不需要添加超过一次,但为什么它不工作