首页 > 解决方案 > Firefox 扩展全局变量和 onInstalled

问题描述

我有一个使用 Omnibox API 的 chrome 扩展。我想自己将此扩展程序移植到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.localon 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;
    });
}

我认为问题可能取决于这些:

哦,我必须说,当

我从这些运行扩展:

web-ext run

它有时可以按预期工作,但是当我从商店下载它时,它不起作用。这怎么可能?我的意思是如何在测试中工作而在生产阶段不起作用?

还有一件事,你知道本地存储 API 的替代方案吗?

谢谢!

源代码在这里:

谷歌浏览器版本

火狐版

标签: javascriptgoogle-chrome-extensionfirefox-addonfirefox-addon-webextensionswebextension-storage

解决方案


推荐阅读