2

У меня возникли проблемы с расширением, которое я пытаюсь сделать. Задача расширения - проверить URL-адреса перед тем, как сделать запрос, и заблокировать те, которые доступны в указанном списке. Файл manifest.json загружает flagged.js, который объявляет и инициализирует массив. Затем он загружает файл, который имеет функцию для проверки URL-адресов: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"]); 

Моя проблема начинается с частью URLs: помеченных,, кажется, список должен быть жестко, чтобы быть принятым. Что я хочу сказать, что я должен указать элементы списка, как например:

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

Если я попытаться пойти в любой из указанных выше областей, расширение будет перенаправлять их на block.html страница никаких проблем. Тем не менее, я хочу, чтобы список будет автоматически или периодически обновляется, поэтому я представил эту часть:

// 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 *, расширение NOT блокирует их, несмотря на то, что они находятся в списке с пометкой.

Любая помощь в этом вопросе была бы очень признательна! Спасибо

EDIT: Я не эксперт по JS или Chrome.API, это моя первая попытка расширения chrome.

+0

Возможно, это потому, что вы вызываете 'chrome.webRequest.onBeforeRequest.addListener' перед завершением' 'XMLHttpRequest''? –

+0

Спасибо за ваш ответ, я должен был объяснить, как я установил JSON-файл. Я обновил это в главном посте. Но массив инициализируется, когда я открываю браузер, который находится на загрузке расширения, который до вызова 'chrome.webRequest.onBeforeRequest.addListener'. –

ответ

1

Да, ваш слушатель регистрируется до завершения XMLHttpRequest.

Позвоните слушателю в свою функцию onreadystatechange, и вы получите его на работу.

Смежные вопросы