gpt4 book ai didi

javascript - chrome.webRequest.onBeforeRequest.addListener 没有阻止 url 数组

转载 作者:行者123 更新时间:2023-11-30 14:03:51 28 4
gpt4 key购买 nike

我正在尝试根据用户输入阻止一系列网址。我有 JSON 格式的 url 数组,但当我导航到这些网站时,这些网站实际上并没有被阻止。如果我只使用一个站点而不是一个数组,它确实会被成功阻止。这是函数。

function addListener(){
chrome.webRequest.onBeforeRequest.addListener(
function(){ return {cancel: true}; },
{
urls: blockedUrls()
},
["blocking"]
);
}

这是我的函数 blockedUrls。

var blockedUrls = function () {
chrome.storage.sync.get(['block'], function(result) {
if (typeof result.block === 'undefined') {
//blocks is not yet set
var jobj = ["*://www.whatever.com/*"];
return [jobj[0]];
console.log("not set");
}
else{
var xt = JSON.parse(result.block);
console.log(JSON.stringify(xt.urls));
return JSON.stringify(xt.urls);
}
});
return ["*://www.whatever.com/*"];
}

console.log确实打印出了我想要的,就是这个(有的明明是测试用的)

["doesntexist.com","*://www.yahoo.com/*","*://www.xbox.com/*","*://www.hello.com/*","*://www.es/*"]

而且,如果有帮助的话,这里是网站最初从变量 request.newSites 设置到 chrome 存储的地方。

var jsonStr = '{"urls":["doesntexist.com"]}';

var obj = JSON.parse(jsonStr);

//add url matching patterns to the urls from user input
for (var i = 0; i < request.newSite.length; i++){
obj['urls'].push( '*://www.' + request.newSite[i] + '/*');
}

jsonStr = JSON.stringify(obj);


chrome.storage.sync.set({'block': jsonStr}, function(){
addListener();
});

提前致谢。

最佳答案

您的代码有几个问题:

1) chrome.storage.sync.get 的回调函数是异步。因此,在您的函数 blockedUrls 中,返回值将始终是 ["*://www.whatever.com/*"],因为行 return [ "*://www.whatever.com/*"]; 将在 chrome.storage.sync.get 的回调函数之前运行。

2) chrome.webRequest.onBeforeRequest 监听器的第二个参数应该是以下形式的对象:{urls: theUrls} 其中 theUrls 是字符串的数组,而不是字符串。

除此之外,您还可以利用 chrome.storage 可以直接存储对象和数组,因此无需对它们进行字符串化。

尝试:

var obj = {urls: ['*://doesntexist.com/*']};

for (var i = 0, j = request.newSite.length; i < j; i++){
obj.urls.push( '*://www.' + request.newSite[i] + '/*');
}

chrome.storage.sync.set({block: obj}, function(){
addListener();
});

function addListener() {
chrome.storage.sync.get('block', function (result) {
var myUrls = result.block || ["*://www.whatever.com/*"];
chrome.webRequest.onBeforeRequest.addListener(function(){
return {cancel: true}
},
{urls: myUrls},
["blocking"] );
});
}

关于javascript - chrome.webRequest.onBeforeRequest.addListener 没有阻止 url 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55832803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com