Javascript Chrome扩展webRequest.onBeforeRequest重定向不重定向

Javascript Chrome扩展webRequest.onBeforeRequest重定向不重定向,javascript,google-chrome,google-chrome-extension,Javascript,Google Chrome,Google Chrome Extension,我正在写一个chrome扩展来阻止网站上的某些页面 为此,我加载了一个包含要阻止的页面的.txt文件,然后将每个页面与用户加载的url进行比较,如果url与文件中的任何页面匹配,则重定向到阻止页面。然而,除了实际的重定向之外,一切都可以正常工作 manifest.json { "name": "Reddit Subreddit Blocker", "description": "Blocks access to specified subreddits.", "version": "1.0",

我正在写一个chrome扩展来阻止网站上的某些页面

为此,我加载了一个包含要阻止的页面的.txt文件,然后将每个页面与用户加载的url进行比较,如果url与文件中的任何页面匹配,则重定向到阻止页面。然而,除了实际的重定向之外,一切都可以正常工作

manifest.json

{
"name": "Reddit Subreddit Blocker",
"description": "Blocks access to specified subreddits.",
"version": "1.0",
"manifest_version": 2,
"background": {
    "scripts":["background.js"],
    "pages": ["blocked.html"],
    "persistent": true
  },
"permissions": [
  "webRequest",
  "*://*.reddit.com/r/*",
  "webRequestBlocking"
]
}
background.js

chrome.webRequest.onBeforeRequest.addListener(
function(details) {
    var r = new XMLHttpRequest();
    r.open("GET", chrome.extension.getURL("test.txt"), true);
    r.onreadystatechange = function(e){ 
        if (r.readyState == 4 && r.status == 200){              
            var subreddits = r.responseText.split("\n");
            var index;
            var url = details.url;

            var found = false;
            for (index = 0; index < subreddits.length && found == false; ++index){
                if (subreddits[index] === url){
                    console.log("Subreddit found.");
                    found = true;
                }
            }

            if (found == false){
                console.log("not found");
                return {cancel: false};
            }else{
                console.log("redirecting");
                return {redirectUrl: chrome.extension.getURL("blocked.html")};
            }                   
        }
    };
    r.send(null);
}, {
    urls: ["https://*.reddit.com/r/*"]
}, ["blocking"]
);

因此,找到了subreddit并执行了要重定向的if语句,但实际上没有重定向。

必须返回onBeforeRequest本身,而不是嵌套的异步回调。在后台脚本的开头将test.txt文件内容放入一个全局变量中,只需在onBeforeRequest侦听器中使用即可。@wOxxOm因此我需要在单独的函数中获取test.txt,将其存储在一个全局变量中,然后在onBeforeRequest函数中进行比较并返回?不确定您到底在问什么。我想我已经够清楚了。让我们等到其他人给出答案。
Subreddit found.
redirecting