2013-04-02 12 views
9

私はいくつかのドメインへのリクエストをブロックするために非常にシンプルなChrome拡張機能を作成しています(Facebookのジャンクを待っています。私の質問は、ドメインのユーザ指定のリストを効率的に読み込む方法です。 Chrome documentationは、すべてのリクエストを渡して自分の関数でチェックするのではなく、 'urls'を含むマップをaddListener呼び出しに渡す方が効率的だと指摘しています。どのようにすればいいですか?ユーザが提供するドメインや表現のリストを使用しますか?ドメインを効率的にブロックするためのChromeの拡張

ここに私のマニフェストとのjsファイルは、これまでのところ、次のとおりです。

manifest.jsonを

{ 
    "name": "I Don't Want YOur Social Networking Junk", 
    "version": "1.0", 
    "description": "This extension let's you block (Chrome will not download) content from domains. Too many sites slow themselves down by bringing in a bunch of junk from sites like facebook. This will let you block those things.", 
    "permissions": ["webRequest", "webRequestBlocking", "http://*/*", "https://*/*"], 
    "background": { 
    "scripts": ["background.js"] 
    }, 

    "manifest_version": 2 
} 

background.js

chrome.webRequest.onBeforeRequest.addListener(
function(details) { 
    return {cancel: true}; 
}, { urls: ["*://*.facebook.com/*", "*://*.facebook.net/*"] }, ["blocking"]); 

は、あなたが見ることができるように私はのカップルを持って、ハードコーディングされました今のURLリストの式。それは私がユーザーが住める何かからロードしたいものです。推薦?

+1

あなたのユーザーにいいオプションページを与えてみませんか? http://developer.chrome.com/extensions/options.html –

答えて

9

使用このような何か:

function blockRequest(details) { 
    return {cancel: true}; 
} 

function updateFilters(urls) { 
    if(chrome.webRequest.onBeforeRequest.hasListener(blockRequest)) 
    chrome.webRequest.onBeforeRequest.removeListener(blockRequest); 
    chrome.webRequest.onBeforeRequest.addListener(blockRequest, {urls: urls}, ['blocking']); 
} 

あなたはブロック(好ましくはchrome.storage APIでそれらを保存)するためにドメインを指定することができるようにoptions pageを提供することができます。バックグラウンドページで、リスナーが初期化されたとき、または設定が変更されたときに、リスナーを再登録してフィルターを更新します。

ちなみに、安定している場合は、はるかに効率的で、永続的なバックグラウンドページを必要としないので、Declarative Web Request APIを使用してください。

関連する問題