2013-04-02 2 views
9

Sto creando un'estensione di Chrome molto semplice per bloccare le richieste ad alcuni domini (mi sono stancato di caricare lentamente la pagina su molti siti Web, in attesa di una junk di Facebook). La mia domanda riguarda come caricare in modo efficiente un elenco di domini specificato dall'utente. Lo Chrome documentation indica che è più efficiente passare una mappa contenente "url" alla chiamata addListener invece di passare tutte le richieste e controllarle nella mia funzione. Come posso farlo, ma utilizzare un elenco di domini/espressioni fornito dall'utente?Estensione di Chrome per bloccare in modo efficace i domini

Qui sono i miei file manifesto e JS finora:

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"]); 

Come potete vedere ho un paio di hard-coded espressioni nella lista url per ora. Questo è quello che mi piacerebbe caricare da qualcosa che un utente potrebbe popolare. Raccomandazioni?

+1

Perché non dare agli utenti una bella pagina di opzioni? http://developer.chrome.com/extensions/options.html –

risposta

9

usare qualcosa di simile a questo:

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']); 
} 

È in grado di fornire un options page per permettere all'utente di specificare i domini per bloccare (e preferibilmente salvarli con chrome.storage API). Nella pagina di sfondo, aggiorna i filtri registrando di nuovo il listener quando viene inizializzato o l'impostazione viene modificata.

A proposito, è necessario utilizzare Declarative Web Request API quando è stabile poiché è molto più efficiente e non richiede una pagina di sfondo persistente.