Javascript Chrome扩展webRequest.onBeforeRequest重定向不重定向
我正在写一个chrome扩展来阻止网站上的某些页面 为此,我加载了一个包含要阻止的页面的.txt文件,然后将每个页面与用户加载的url进行比较,如果url与文件中的任何页面匹配,则重定向到阻止页面。然而,除了实际的重定向之外,一切都可以正常工作 manifest.jsonJavascript 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",
{
"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