Chrome onBeforeRequest侦听器中的异步调用替代方案

wljmcqd8  于 2023-05-11  发布在  Go
关注(0)|答案(1)|浏览(157)

对于我的Chrome扩展程序,我希望具有阻止请求功能。我有一个很大的域列表(~10000),我想使用IndexedDb来存储域列表,但正如我现在所理解的那样-不可能进行异步调用并在请求处理程序中返回结果。我最初的计划是:

function reqHandler(data) {
  // async IndexedDb call here 
  // and return { cancel: true } or { cancel: false } depends on result
}
chrome.webRequest.onBeforeRequest.addListener(
  reqHandler,
  { urls: ['<all_urls>'] },
  ['blocking']);

看起来不可能?处理我的案子的最好方法是什么?如何处理这个大小的域名列表?我认为它太大了,不能作为对象保存在内存中。希望你能告诉我如何处理这个问题。谢谢你

ybzsozfc

ybzsozfc1#

试试这个:
创建JS文件,如BlockUrl.js,并将数组变量放入其中,您将在其中存储URL,如:

UrlBlck = [
    "*://*.something.com/*",
];

在另一个类似Code.js的JS文件中,放入以下代码:

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

在“manifest.json”中,在header(name,author,version,and that stuff)后面加上:

"background": {
    "scripts": ["BlockUrl.js", "Code.js"]
  },

“content_scripts”部分应该如下所示:(因为“规则”,你必须至少有一个JS文件,如果你没有其他JS文件,请创建一个空文件)

"content_scripts": [{
    "matches": ["*://*/*"],
    "js": ["Empty.js"]
  }],

在manifest的末尾:

"permissions": ["webRequest", "webRequestBlocking", "<all_urls>"]

现在你可以试试。。

相关问题