2014-03-04 2 views
1

제어 할 수없는 소셜 웹 사이트에서 사용할 확장 프로그램을 만들고 있습니다. 해당 웹 사이트는 사용자가 다른 도메인의 컨텐츠 (이미지, 플래시 등 ...)를 삽입 할 수 있도록합니다. 나는 이것을 막고 싶다.Chrome 확장 프로그램 : 특정 도메인의 페이지에로드되는 외부 도메인의 콘텐츠 차단

처음에는 dom이로드되었지만 컨텐츠가로드되지 않았을 때 문서 준비가 시작되므로 jquery document.ready를 실행하고 그 시점에서 html에서 컨텐츠를 제거한다고 생각했습니다. 난 그냥 HTTP 요청이 발생하는 것을 막을 것이라고 희망에 필요한 div 요소를 비우십시오. 불행히도이 기술은 작동하지 않습니다.

그런 다음 작동하는 것처럼 보이는 chrome.webRequest를 발견했습니다. 내가 가지고있는 어려움은 내가하고있는 도메인에만 확장 기능을 적용시키는 것입니다. Chrome.webRequest는 콘텐츠 페이지가 아닌 배경 페이지에서만 사용할 수 있습니다.

"permissions": [ 
    "tabs", 
    "http://www.example.com/*", 
    ], 

을하지만 그때 나는 확장자가 기록되고 있었다위한 사이트 만 이미지 요청을 발견 chrome.webRequest.onBeforeRequest.addListener를 사용하여 요청을 기록 :

내 초기 매니페스트 권한이 좋아 보였다. 그래서 나는이에 대한 권한을 변경 : 지금 chrome.webRequest.onBeforeRequest.addListener를 사용하여 모든 요청을 볼 수 있습니다

"permissions": [ 
    "tabs", 
    "<all_urls>", 
    "webRequest", 
    "webRequestBlocking" 
    ], 

. 그러나이 이벤트는 백그라운드 페이지에서 실행되기 때문에 브라우저에서 방문하는 모든 도메인에 대해 실행됩니다. 이미지로드를 차단하면 모든 사이트 로딩 중 모든 이미지가 차단됩니다.

chrome.webRequest.onBeforeRequest.addListener에 의해 반환 된 개체에 사용자가 현재있는 탭의 URL이 포함되지 않는 것이 문제입니다. 오직 tabid. 요청에 현재 탭이있는 도메인을 감지 할 수 있음을 알 수있는 내용이 없습니다. 분명히 chrome.tabs.query를 사용하여 탭 아이디로 tab.url을 얻을 수 있지만 onBeforeRequest 리스너 이벤트만큼 비동기 적입니다. 난 단지로드 이미지가 (어느 곳에서 이미지가 될 수있는) 때이 코드를 취소 실행 어떻게 요컨대 그래서

chrome.webRequest.onBeforeSendHeaders.addListener(

    function(details) { 

    if(details.type == "image" && (details.url.indexOf("://www.example.com") == -1)){ 
    console.log(details.url);  
      //THIS LOGS ALL IMAGES LOADING EXCEPT THE SITE THE EXTENSION IS FOR 
      //BUT THE CANCEL ALSO CANCELS IMAGES LOADING ON ALL OTHER SITES. 
      return {cancel: true}; 
    } 

    }, 
    {urls: ["<all_urls>"]}, 
    ["blocking"]); 

되고있다 :

순간에 이벤트 리스너 코드 확장 기능이있는 사이트에로드 되었습니까?

마침내 (이 기능을 사용할 수 있다면) 파이어 폭스는 chrome.webrequest와 비슷한 옵션을 가지고 있기 때문에 파이어 폭스 애드온을 만들고 싶습니다. 여기

+0

그래서 심층적 인 솔루션을 제공하지 임 아픈 그냥 코멘트 - nsIContentPolicy이 문서에서 본 [여기] (http://www.bing.com/search?q=nsicontentpolicy&pc=MOZI&form=MOZLBR) – Noitidart

+0

고마워. 그러나 링크는 Noingidart라는 웹 페이지가 아닌 Bing 검색을 가리키고 있습니다. 또한 nslContentPolicy가 firefox의 것입니까, 아니면 크롬의 것입니까? 아니면 둘 다입니까? 내가 찾을 수있는 것을 볼 수있다. – Paulie

+1

여기에 [MDN - nsiContentPolicty] (https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIContentPolicy?redirectlocale=en-US&redirectslug=nsIContentPolicy)에 대한 기사가 있습니다. – Noitidart

답변

관련 문제