2

확장 프로그램에 문제가 있습니다. 확장 기능의 역할은 요청하기 전에 URL을 확인하고 제공된 목록에서 사용 가능한 URL을 차단하는 것입니다. manifest.json 파일은 배열을 선언하고 초기화하는 flagged.js를로드합니다.는 주문이 수락 할 수있는 목록이 고정 배선해야 것, 플래그 :chrome .... onBeforeRequest ...() URL 목록이 예상대로 작동하지 않습니다.

// To detected and filter globally flagged websites 
chrome.webRequest.onBeforeRequest.addListener(
    // What to do if detected a website 
    function(info) { 

     return {redirectUrl: 'chrome-extension://' + chrome.i18n.getMessage('@@extension_id') + 
      '/blocked.html?flag_type=globally&url=' + escape(info.url)}; 
    }, 

    // Website to watchout for 
    { 
     urls: flagged, 
     types: [] 
    }, 

    // Action to be performed? 
    ["blocking"]); 

내 문제는 일부 URL을 시작 : 다음에, URL을 확인하는 기능이있는 파일을로드합니다. 내가 위에 지정된 도메인의 이동하려고하면 확장이 block.html로 리디렉션됩니다

var flagged = [ 
"*://*.domain_1.com/*", 
"*://*.domain_2.com/*", 
"*://*.domain_3.com/*", 
"*://*.domain_4.com/*", 
]; 

: 무엇 내가 말을 말은 내가 같은 목록의 항목을 지정해야한다는 것입니다 페이지에서 문제가 없습니다. 그러나, 나는 그 목록이 자동으로 또는 주기적으로 업데이트해야 할, 그래서 나는이 부분을 소개 : 나는 변경하고 이해가되지 않거나 다르게 할 수있는 일을 추가하기 위해 노력했다

// Get list from the text file we have stored 
function getFlagged(url) { 
    var list = []; 
    var file = new XMLHttpRequest(); 
    file.open("GET", url, true); 
    file.onreadystatechange = function() { 
     if (file.readyState === 4) { 
      if (file.status === 200) { 
       allText = file.responseText; 
       list = file.responseText.split('|'); 
        for(var i=0; i<list.length; i++) 
         flagged.push(list[i]); 
      } 
     } 
    } 
    file.send(null); 
} 

가, 난 그냥 필사적이었다. 목록에 새 항목이 채워집니다 (예 : * domain_5 ** domain_6 *). 이 작업은 확장 기능이로드 될 때 가장 먼저 발생하거나 그렇게 생각합니다. 그러나 * domain_5 ** domain_6 *에 액세스하려고 시도하면 확장자는 이 아니며은 차단 목록에 있음에도 불구하고 차단합니다.

이 문제에 대한 도움을 주시면 매우 감사하겠습니다. 감사합니다.

EDIT : 저는 JS 또는 Chrome의 전문가가 아닙니다 .API는 크롬 확장에 대한 첫 번째 시도입니다.

+0

XMLHttpRequest가 완료되기 전에 'chrome.webRequest.onBeforeRequest.addListener'를 호출했기 때문일 수 있습니다. –

+0

답장을 보내 주셔서 감사합니다. JSON 파일을 설정하는 방법을 설명해야합니다. 나는 그것을 메인 포스트에서 업데이트했다. 그러나 배열은 'chrome.webRequest.onBeforeRequest.addListener'호출 이전의 확장로드 업에있는 브라우저를 열 때 초기화됩니다. –

답변

1

예, 리스너가 XMLHttpRequest가 완료되기 전에 등록 중입니다.

onreadystatechange 함수에서 리스너를 호출하면 제대로 작동합니다.

관련 문제