Javascript 使用chrome.webRequest进行白名单/阻止
所以我一直在尝试将白名单功能添加到chrome扩展中,在该扩展中,白名单可以通过更新,也可以完全禁用 在检查了文档和这里所有可能的答案之后,我仍然面临一个奇怪的问题,如果有任何关于它的说明,我将不胜感激 下面是代码片段Javascript 使用chrome.webRequest进行白名单/阻止,javascript,google-chrome-extension,Javascript,Google Chrome Extension,所以我一直在尝试将白名单功能添加到chrome扩展中,在该扩展中,白名单可以通过更新,也可以完全禁用 在检查了文档和这里所有可能的答案之后,我仍然面临一个奇怪的问题,如果有任何关于它的说明,我将不胜感激 下面是代码片段 //this list can be updated by user or other trigger var allowed = ["example.com", "cnn.com", "domain.com"]; //this is main callback, so it
//this list can be updated by user or other trigger
var allowed = ["example.com", "cnn.com", "domain.com"];
//this is main callback, so it can be removed from listener when needed
whiteMode = function (details) {
//checking url to array
var even = function(element) {
return details.url.indexOf(element) == -1;
}
if (allowed.some(even) == true) {
return {cancel: true }
} else {
return {cancel: false}
}
}
//setup listener
chrome.webRequest.onBeforeRequest.addListener(
whiteMode,
{urls: ["<all_urls>"]},
["blocking"]
);
然后,如果我想更新允许的列表,我首先使用removeListener,然后用新值重新启动它,它确实会启动,但是“whiteMode”函数现在一直触发两次。通过检查console.log,我发现我的新url在第一次尝试时在数组中丢失,然后立即侦听器再次工作,并且有正确的允许的新数组,但是由于它已经被第一个触发器阻止,所以它什么也不做
问题是,为什么监听器总是重复两次或更多次(比如说,如果我添加了更多的项目),即使在添加回之前删除了它
有没有办法让所有的听众听清?(文档中没有这方面的内容),已经为此挣扎了很长一段时间
另外,尝试使用onHandlerBehaviorChanged,但没有帮助。将函数提取为全局
函数whiteMode
,以便其对象引用不会更改。你现在似乎每次都在重新创建whiteMode。哦,没错,它成功了!你救了我一天,在宣布func为其他范围之外的全局之后,真是个魅力!
chrome.webRequest.onBeforeRequest.removeListener(whiteMode);