2

作成しようとしている拡張機能に問題があります。拡張機能の仕事は、リクエストを行う前に 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 拡張機能の最初の試みです。

4

1 に答える 1

1

ええ、XMLHttpRequest が終了する前にリスナーが登録されています。

onreadystatechange 関数でリスナーを呼び出すと、機能するようになります。

于 2012-05-03T16:36:24.253 に答える