javascript - chrome....onBeforeRequest...() URL 列表未按预期运行

标签 javascript arrays google-chrome google-chrome-extension

我在尝试制作扩展时遇到了一些问题。该扩展程序的工作是在发出请求之前检查 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 扩展。

最佳答案

是的,您的监听器在 XMLHttpRequest 完成之前注册。

在您的 onreadystatechange 函数中调用监听器,您将让它工作。

关于javascript - chrome....onBeforeRequest...() URL 列表未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10307661/

相关文章:

javascript - 正则表达式不适用于 Firefox,但适用于 Chrome

混淆结果 : Array of pointers in C

arrays - 在数组中查找圆的算法

javascript - 排列数组中的数字,使其创建最大的数字

html - 嵌套 Flexbox 未在 chrome 或 IE 中换行

javascript - 在 Chart.js 栏上画线

javascript - 在渲染子元素之前加载数据 React

javascript - 无法通过 jquery 到达特定元素 : Undefined

javascript - Bootstrap 数据切换影响标题中的按钮

javascript - chrome扩展程序应在youtube标签不清晰时暂停视频