У меня возникли проблемы с расширением, которое я пытаюсь сделать. Задача расширения - проверить 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.
Возможно, это потому, что вы вызываете 'chrome.webRequest.onBeforeRequest.addListener' перед завершением' 'XMLHttpRequest''? –
Спасибо за ваш ответ, я должен был объяснить, как я установил JSON-файл. Я обновил это в главном посте. Но массив инициализируется, когда я открываю браузер, который находится на загрузке расширения, который до вызова 'chrome.webRequest.onBeforeRequest.addListener'. –