0

我是新手,正在尝试编写一些基础扩展。为了使我的扩展工作,我需要初始化一些数据,所以我所做的是在我的内部我background.js声明了这样的东西。

localStorage["frequency"] = 1; //I want one as Default value. This line is not inside any method, its just the first line of the file background.js

用户可以转到选项页面并使用 GUI 将上述变量更改为任何值。一旦用户在 UI 中更改它,就会更新该值。

现在问题是我的理解 background.js 每次重新启动机器时都会重新加载。所以每次我重新启动机器并打开 Chrome 时,频率值都会变回 1。为了避免这种情况,我需要在哪里初始化这个值?

4

3 回答 3

1

您可以只使用特定的默认密钥。所以如果frequency没有设置你会尝试default-frequency。然后仍然在 background.js 中设置或定义默认键。

我喜欢在这样的功能中一步完成

function storageGet(key,defaultValue){
    var item = localstorage.getItem(key);
    if(item === null)return defaultValue;
    else return item;
}

(根据规范,如果未设置任何值,则localstorage 必须返回null。)因此,对于您的情况,它看起来像

var f = storageGet("frequency",1);

此外,您可能有兴趣查看chrome.storage API。它的使用类似于 localstorage,但提供了可能对您的扩展有用的附加功能。特别是它支持跨不同的 chrome 浏览器同步用户数据。

编辑我更改了关于 apsillers 反对的 if 语句。但是由于规范说它应该为空,我认为检查它而不是未定义是有意义的。

于 2012-08-30T14:01:57.767 回答
1

这是另一种解决方案:

// background.js

initializeDefaultValues();

function initializeDefaultValues() {
    if (localStorage.getItem('default_values_initialized')) {
        return;
    }

    // set default values for your variable here
    localStorage.setItem('frequency', 1);

    localStorage.setItem('default_values_initialized', true);
}
于 2012-08-30T14:17:11.290 回答
0

我认为问题在于您的语法。要获取和设置您的 localStorage 值,请尝试使用:

// to set
localStorage.setItem("frequency", 1);

// to get
localStorage.getItem("frequency");
于 2012-08-30T13:28:01.073 回答