chrome .... onBeforeRequest ...()URL列表无法按预期运行

时间:2012-04-25 00:03:43

标签: 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:已标记, 开始,似乎列表必须是硬连线才能被接受。我的意思是,我必须指定列表项:

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 * 时,扩展程序 NOT 会阻止它们,尽管它们位于列表标记。

非常感谢您对此问题的任何帮助! 谢谢

编辑:我不是JS或Chrome.API的专家,这是我第一次尝试使用Chrome扩展程序。

1 个答案:

答案 0 :(得分:1)

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

在你的onreadystatechange函数中调用监听器,你就可以使它工作了。