Привет Я делаю расширение хром для некоторой практики, которая является простым блокировщиком сайтов. У меня есть два разных JS-файла, которым необходимо разделить один и тот же массив, содержащий URL-адреса для блокировки.Доступ к массиву в другом JS-файле - Расширение Chrome
- background.js обрабатывает webRequests и блокирующие сайты
- options.html страница опций, где пользователи могут редактировать URL-адресов, которые будут заблокированы, это вызывает storeURL.js так, что он может хранить все элементы в списке на странице html в массив js. Пока нет проблем.
Однако я не могу получить доступ к массиву внутри storeURL.js из background.js. Кажется, они вызываются в двух отдельных случаях. Если я попытаюсь включить как storeURL.js, так и background.js внутри моего background.html, это приведет к запуску двух полностью отдельных скриптов storeURL.js.
Как мне это сделать? Должен ли я хранить содержимое массива из storeURL.js в файл?
Некоторые примеры:
background.js
chrome.webRequest.onBeforeRequest.addListener(
blocking,["blocking"]);
{ urls: blockedURLS, types: [] }, ["blocking"]);
storeURL.js заполнит массив на основе списка в options.html
var blockedURLS = [];
$('li').each(function(i, elem) {
blockedURLS.push($(elem).text());
});
blockedURLS в моих background.js выглядит как не определено. Я также попытался указать свой файл options.html в background.js и просто включить все JS в одном файле со следующим:
<script type="text/javascript" src="background.js"></script>
Однако, когда я делаю это, кажется, что второй background.js является а не просто указывая на уже запущенный.
Чувства, как будто я зашел в тупик, возможно, простое решение, которое доступно для устранения моей проблемы. Я довольно новичок в расширениях JS/chrome.
Спасибо, что нашли время, чтобы прочитать это!
EDIT: После нескольких попыток я могу получить доступ к моему заблокированному массиву в моем background.js. Однако он никогда не обновляется.
var blockedURLS = ["hi"] ;
var list = document.getElementById('list');
$("#saveList").click(function(e) {
e.preventDefault();
localStorage.setItem('todoList', list.innerHTML);
alertify.success("You have saved your list.");
//Pushes each element in the list from options.html into the urls array
blockedURLS = [];
$('li').each(function(i, elem) {
blockedURLS.push($(elem).text());
});
alert("Currently blocked:\n" + blockedURLS);
});
$("#reset").click(function(e) {
e.preventDefault();
localStorage.clear();
location.reload();
});
loadToDo();
function loadToDo() {
if (localStorage.getItem('todoList')){
list.innerHTML = localStorage.getItem('todoList');
}
}
Что должно происходить в том, что после того, как я иду в мой options.html и сохранить список, «привет» должен быть заменен с разными URL, у меня есть в моем списке. Однако это не так. Тем не менее, массив заблокированныйURL печатается правильно.
Возможный дубликат [Как передать переменное значение между фоновыми скриптами в хром-расширениях) (http://stackoverflow.com/questions/21012250/how-to-pass-a-variable-value-between-background-scripts -in-chrome-extensions) –