2013-04-02 19 views
9

Bazı etki alanlarına gelen istekleri engellemek için çok basit bir Chrome uzantısı yapıyorum (birçok web sitesinde yavaş sayfa yüklemelerinden bıktınız, Facebook'ta beklemeden beklemekteyim). Sorum, kullanıcı tarafından belirtilen alan adlarının verimli bir şekilde nasıl yükleneceğiyle ilgilidir. Chrome documentation, tüm istekleri iletmek ve işlevlerimde kontrol etmek yerine 'URL'leri içeren bir haritayı addListener çağrısına iletmenin daha verimli olduğunu belirtir. Bunu nasıl yapabilirim, ancak kullanıcı tarafından sağlanan alan adları/ifadeleri listesini kullanabilir miyim?Etki alanlarını etkili bir şekilde engellemek için Chrome uzantısı

İşte benim bildirim ve js dosyaları ana kadar şunlardır:

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

Gördüğünüz gibi ben bir çift sert kodlu şimdilik urls listesindeki ifadeler. Bu, bir kullanıcının doldurabileceği bir şeyden yüklemek istediğim şeydir. Öneriler? Böyle

+1

Neden kullanıcılarınıza güzel bir seçenek sayfası vermiyorsunuz? http://developer.chrome.com/extensions/options.html –

cevap

9

Kullanım şey:

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

Bir options page kullanıcı engellenecek alanları belirlemek (ve tercihen chrome.storage API ile onları kurtarmak) için izin verebilir. Arka plan sayfanızda, başlatıldığında veya ayar değiştirildiğinde dinleyiciyi yeniden kaydederek filtreleri güncelleyin.

Bu arada, Declarative Web Request API'u çok daha verimli ve kalıcı bir arka plan sayfası gerektirmediğinden kararlı olduğunda kullanmalısınız.

İlgili konular