Глобальные переменные расширения Firefox и onInstalled

У меня есть расширение Chrome, использующее Omnibox API. Я хочу самостоятельно перенести это расширение на firefox.

Я перепробовал почти все, что могло помочь, и, к сожалению, я устал и у меня нет решений.

В любом случае, расширение в основном выполняет следующие действия в Chrome без ошибок:

  1. Загрузить глобальную переменную с именем sites который представляет собой массив объекта
var sites = [
    {
        "name":"ytb",
        "desc":"YouTube",
        "url":"https://www.youtube.com/results?search_query={%query%}"
    },
    {
        "name":"ggl",
        "desc":"Google",
        "url":"https://www.google.com/search?q={%query%}"
    },
    {
        "name":"dvand",
        "desc": "Android Devs",
        "url": "https://developer.android.com/s/results?q={%query%}"
    },
    {
        "name":"bng",
        "desc":"Bing",
        "url":"https://www.bing.com/search?q={%query%}"
    },
...
];
  1. Сохранить объект сайтов в storage.local на runtime.onInstalled:
browser.runtime.onInstalled.addListener((details) => {
    if (details.reason == "install") {
        console.log("First install");
        save(); //which saves sites to local storage...
        load(); //which load sites from local storage...
    }
});

Вот функции сохранения и загрузки:

function save() {
    browser.storage.local.set({"ssearch_sites":sites}, () => {
        console.log("Saved!",sites);
        sites = sites;
    });
}
function load() {
    browser.storage.local.get('ssearch_sites', (res) => {
        console.log("Got!",res.ssearch_sites);
        sites = res.ssearch_sites;
    });
}

Я думаю, что проблемы могут быть связаны с этим:

  • onInstalled не работает
  • глобальные переменные, такие как сайты, не сохраняются (что не совсем возможно).
  • локальное хранилище api не работает очень хорошо...

О, и я должен сказать, когда

Я запускаю расширение из этих:

web-ext run

Иногда работает как положено, но при загрузке из магазина не работает. Как такое могло быть? Я имею в виду, как работает на тестировании и не работает на стадии продакшена?

И еще, знаете ли вы альтернативу API локального хранилища?

Спасибо!

Исходные коды здесь:

Версия Google Chrome

Версия Firefox

0 ответов