Google chrome extension 在何处初始化扩展相关数据

Google chrome extension 在何处初始化扩展相关数据,google-chrome-extension,Google Chrome Extension,我是一个新手,试图写一些基本的扩展。为了使扩展正常工作,我需要初始化一些数据,所以我所做的就是在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将上述变量更改为任何值。一

我是一个新手,试图写一些基本的扩展。为了使扩展正常工作,我需要初始化一些数据,所以我所做的就是在
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。为了避免出现这种情况,我需要初始化此值。

我认为问题在于语法。要获取和设置本地存储值,请尝试使用以下方法:

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

// to get
localStorage.getItem("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);
此外,您可能有兴趣查看。它的使用类似于localstorage,但提供了其他功能,这些功能可能对您的扩展有用。特别是,它支持跨不同的chrome浏览器同步用户数据


编辑我更改了关于apsillers异议的if声明。但是既然规范说它应该为null,我认为检查它而不是未定义是有意义的。

这是另一种解决方案:

// 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);
}

getItem
setItem
实际上与属性访问相同。唯一微不足道的区别是,属性访问不能持久存储在作为localStorage现有属性名称的键上(例如,
localStorage[“getItem”]=“foo”
不会持久,但
localStorage.setItem(“getItem”,“foo”)
有。另一个区别是,可以包装函数以覆盖其默认行为,例如,在存储前对对象进行JSONify处理。+1;但是,您可能希望在检查中使用
if(typeof item!=“undefined”)
。if
getItem
为且程序存储
false
(或任意),则检索将失败,并使用默认值。感谢您的快速回答。将尝试实现。@LeoR Right,good catch!对不存在的键的属性访问会产生
未定义的
,而函数访问会产生
null
,正如您所说。这里有语法错误吗?localStorage.setItem('frequency'))=1;显示未捕获的引用错误:赋值中的左侧无效,因此我将其更改为localStorage。setItem['frequency']=1;未显示错误,但localStorage中未存储任何项目。已尝试localStorage['frequency']=1;在localStorage中工作并显示。我是否做错了什么?无需担心,此操作有效。localStorage.setItem(“频率”,1);