我正在尝试进行扩展时遇到一些问题。扩展程序的工作是在发出请求之前检查 URL,并阻止提供的列表中可用的 URL。manifest.json 文件加载 flagged.js 声明和初始化数组。然后,它加载具有检查 URL 功能的文件:
// To detected and filter globally flagged websites
chrome.webRequest.onBeforeRequest.addListener(
// What to do if detected a website
function(info) {
return {redirectUrl: 'chrome-extension://' + chrome.i18n.getMessage('@@extension_id') +
'/blocked.html?flag_type=globally&url=' + escape(info.url)};
},
// Website to watchout for
{
urls: flagged,
types: []
},
// Action to be performed?
["blocking"]);
我的问题从部分urls: flagged 开始,似乎列表必须硬连线才能被接受。我的意思是,我必须这样指定列表项:
var flagged = [
"*://*.domain_1.com/*",
"*://*.domain_2.com/*",
"*://*.domain_3.com/*",
"*://*.domain_4.com/*",
];
如果我尝试访问上述任何指定域,扩展程序会将它们重定向到block.html页面,没有问题。但是,我希望该列表能够自动或定期更新,所以我介绍了这部分:
// Get list from the text file we have stored
function getFlagged(url) {
var list = [];
var file = new XMLHttpRequest();
file.open("GET", url, true);
file.onreadystatechange = function() {
if (file.readyState === 4) {
if (file.status === 200) {
allText = file.responseText;
list = file.responseText.split('|');
for( var i=0; i<list.length; i++ )
flagged.push(list[i]);
}
}
}
file.send(null);
}
我试图改变和添加一些可能没有意义或可以做不同的事情,我只是绝望了。该列表将填充新项目,例如*domain_5*和*domain_6*。此操作将在加载扩展程序时首先发生,或者我认为。但是,当我尝试访问*domain_5*和*domain_6*时,尽管它们在标记的列表中,但扩展程序不会阻止它们。
对此问题的任何帮助将不胜感激!谢谢
编辑:我不是 JS 或 Chrome.API 方面的专家,这是我第一次尝试 chrome 扩展。