2013-04-02 3 views
9

일부 도메인에 대한 요청을 차단하는 매우 간단한 Chrome 확장 프로그램을 만들고 있습니다. 많은 웹 사이트에서 느린 페이지로드가 발생하여 페이스 북의 정크를 기다리는 것이 싫습니다. 내 질문은 효율적으로 사용자가 지정한 도메인 목록을로드하는 방법에 관한 것입니다. 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']); 
} 

당신은 options page 사용자가 차단 도메인을 지정 (바람직 chrome.storage API로 저장) 할 수 있도록 제공 할 수 있습니다. 배경 페이지에서 리스너가 초기화되거나 설정이 변경 될 때 리스너를 다시 등록하여 필터를 업데이트하십시오.

그런데 안정적이면 훨씬 더 효율적이고 지속적인 배경 페이지가 필요하지 않으므로 Declarative Web Request API을 사용해야합니다.

관련 문제