Firefox WebExtension, сохраните массив в хранилище браузера

63
9

Можете ли вы сохранить массив с помощью browser.storage.local.set или добиться того же результата с помощью другого метода?

Подробности:

В настоящее время мое расширение перенаправляет веб-сайт, указанный в форме options.html. В настоящее время, когда вы укажете новый веб-сайт, старый будет заменен. Есть ли способ добавить к массиву веб-сайтов, которые будут перенаправлены вместо замены веб-сайта?

options.js: (будет обрабатывать информацию из формы в options.html)

function saveOptions(e) {
e.preventDefault();
browser.storage.local.set({
url: document.querySelector("#url").value
});
}
function restoreOptions() {
function setCurrentChoice(result) {
document.querySelector("#url").value = result.url || "reddit.com";
}
function onError(error) {
console.log('Error: ${error}');
}
var getting = browser.storage.local.get("url");
getting.then(setCurrentChoice, onError);
}
document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector("form").addEventListener("submit", saveOptions);

redirect.js:

function onError(error) {
console.log('Error: ${error}');
}
function onGot(item) {
var url = "reddit.com";
if (item.url) {
url = item.url;
}
var host = window.location.hostname;
if ((host == url) || (host == ("www." + url))) {
window.location = chrome.runtime.getURL("redirect/redirect.html");
}
}
var getting = browser.storage.local.get("url");
getting.then(onGot, onError);

Одна мысль, которую я имел, заключалась в том, чтобы добавить место хранения на каждый URL-адрес, однако i также нужно будет сохранить его, чтобы он не перезагружался каждый раз при загрузке options.js. (Что-то похожее на приведенный ниже код)

var i = 0;
browser.storage.local.set({
url[i]: document.querySelector("#url").value
});
i++;

Более логичным решением было бы расположение хранилища url адресов как массив.

Если url может быть массивом, то redirect.html может содержать следующее:

if ( (url.includes (host) ) || (url.includes ("www." + host) ) ){
window.location = chrome.runtime.getURL("redirect.html");
}

спросил(а) 2021-01-25T15:22:03+03:00 4 месяца, 2 недели назад
1
Решение
88

Свежие глаза решили мою проблему.

В options.js:

function saveOptions(e) {
e.preventDefault();
var array = (document.querySelector("#url").value).split(",");
browser.storage.local.set({
url: array
});

В redirect.js:

function onGot(item) {
var url = "";
if (item.url) {
url = item.url;
}
var host = window.location.hostname;
if ( (url.includes(host)) || (url.includes("www." + host)) ) {
window.location = chrome.runtime.getURL("redirect/redirect.html");
}
}

ответил(а) 2021-01-25T15:22:03+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема