javascript - Firefox WebExtension,在浏览器的存储中存储一个数组

标签 javascript firefox-addon-webextensions

您可以使用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);

重定向.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");
}

最佳答案

新鲜的眼睛解决了我的问题。

在 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");
    }   
}

关于javascript - Firefox WebExtension,在浏览器的存储中存储一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006314/

相关文章:

javascript - 获取下一个包含特定元素的 x 元素?

javascript - jQuery - mouseOver 改变 div

javascript - 使用JS获取变量的所有值

javascript - 在检查元素中声明变量时未定义

javascript - 区分 webRequest.onBeforeRequest 原始页面与注入(inject)页面

javascript - 在书签菜单中添加上下文菜单

javascript - getElementById 具有动态创建的现有 id

javascript - 有没有办法附加到对象 URL 或以其他方式创建流作为 URL?

javascript - 火狐网页扩展 "selectionchange"

javascript - 在阻塞的 webRequest 处理程序中使用异步调用