2013-04-02 8 views
9

मैं कुछ डोमेन के अनुरोधों को अवरुद्ध करने के लिए एक बहुत ही सरल क्रोम एक्सटेंशन बना रहा हूं (कई वेबसाइटों पर धीमे पृष्ठ लोड से थक गया, फेसबुक जंक पर प्रतीक्षा कर रहा हूं)। मेरा सवाल डोमेन के उपयोगकर्ता द्वारा निर्दिष्ट सूची को कुशलता से लोड करने के तरीके के बारे में है। Chrome documentation बताता है कि सभी अनुरोधों में गुजरने और उन्हें मेरे कार्य में जांचने के बजाय addListener कॉल में 'urls' वाले मानचित्र को पास करने के लिए अधिक कुशल है। मैं यह कैसे कर सकता हूं, लेकिन डोमेन/अभिव्यक्तियों की उपयोगकर्ता द्वारा प्रदत्त सूची का उपयोग करें?क्रोम एक्सटेंशन कुशलता से डोमेन को अवरोधित करने के लिए

यहाँ मेरी प्रकट और JS फ़ाइलों को अब तक कर रहे हैं:

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

आप देख सकते हैं मैं के एक जोड़े है

manifest.json हार्ड-कोडेड अब के लिए यूआरएल सूची में अभिव्यक्तियाँ। यही वह है जो मैं किसी ऐसे चीज़ से लोड करना चाहता हूं जिसे उपयोगकर्ता पॉप्युलेट कर सकता है। सिफारिशें?

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

आप एक options page उपयोगकर्ता डोमेन को अवरूद्ध करने के लिए निर्दिष्ट (और अच्छा होगा यदि उन्हें chrome.storage API से बचाने के लिए) के लिए जाने के लिए प्रदान कर सकते हैं। अपने पृष्ठभूमि पृष्ठ में, जब इसे प्रारंभ किया जाता है या सेटिंग बदल जाती है तो श्रोता को पुन: पंजीकृत करके फ़िल्टर अपडेट करें।

वैसे, आपको स्थिर होने पर Declarative Web Request API का उपयोग करना चाहिए क्योंकि यह अधिक कुशल है और लगातार पृष्ठभूमि पृष्ठ की आवश्यकता नहीं है।

संबंधित मुद्दे