将本地存储转换为Chrome存储进行get和set
Converting local storage to Chrome storage for get and set
我有一个userscript,我已经变成了一个Chrome扩展为我的用户有Chrome。userscript设置主题并有主题可供选择,但仅使用localStorage,除了主子域之外的任何内容都将具有默认主题。我希望使用Chrome的存储API可以缓解这种情况,但我对如何让它工作感到困惑。
原始代码:
hasGM: typeof GM_deleteValue !== "undefined",
get: function(name)
{
var val = this.hasGM ?
GM_getValue(NAMESPACE + name) :
localStorage.getItem(NAMESPACE + name);
if (val != undefined)
return JSON.parse(val);
return defaultConfig[name];
},
set: function(name, val)
{
name = NAMESPACE + name;
if (typeof val !== "number")
val = JSON.stringify(val);
return this.hasGM ?
GM_setValue(name, val) :
localStorage.removeItem(name, val),
localStorage.setItem(name, val);
}
},
这是我到目前为止所做的,其中val被打印为未定义,即使我可以在控制台执行console.log的结果[NAMESPACE + name]和值。
hasGM: typeof GM_deleteValue !== "undefined",
get: function(name)
{
names = NAMESPACE + name;
var val = this.hasGM ?
GM_getValue(names) :
chrome.storage.local.get(names, function(result){return result[NAMESPACE + name];});
if (val != undefined)
return JSON.parse(val);
console.log(val);
return defaultConfig[name];
},
set: function(name, val)
{
name = NAMESPACE + name;
setObj={};
setObj[name]=val;
if (typeof val !== "number" && this.hasGM)
val = JSON.stringify(val);
return this.hasGM ?
GM_setValue(name, val) :
chrome.storage.local.remove(name),
chrome.storage.local.set(setObj);
}
基本上我就是无法理解它,需要一些帮助
for (var key in defaultConfig)
$SS.conf[key] = parseVal(key, this.get(key, function(_arg) {
var val;
val = _arg[key];
return callback(val);
}));
这是你可以做的事情,我省略了hasGM
的东西,使事情更简单:
get: function(name, callback) {
names = NAMESPACE + name;
chrome.storage.local.get(names, function(val){
if (val != undefined) {
callback(JSON.parse(val));
} else {
callback(defaultConfig[name]);
}
})
},
所以这意味着代码调用你的get
函数也必须改变,我很抱歉,但真的没有别的办法。不过,您也可以(大多数人都愿意)将同步内容转换为使用回调模式,就像这样:
get: function(name, callback) {
names = NAMESPACE + name;
if(this.hasGM) {
callback(GM_getValue(names));
} else {
chrome.storage.local.get(names, function(val){
if (val != undefined) {
callback(JSON.parse(val));
} else {
callback(defaultConfig[name]);
}
})
}
},
处理异步函数的一些规则:
- 他们不返回任何东西!(除非他们是基于承诺的)
- 在回调中返回一些东西是没有意义的,它不会去任何地方! 回调之外的
- 代码通常会在回调之前运行,总是假设回调将在稍后的时间执行,因此你不能依赖回调中发生的任何变量设置/获取!
相关文章:
- 有没有一种方法可以防止img get请求使用css或js发生
- 将作用域存储在JSON中
- 使用javascript存储变量的最安全方式
- 当图像转换为本地存储的DataURL时,EXIF被删除
- 如何将从XML读取的值存储到本地对象's成员使用.get()函数
- JavaScript $http.get 一个 json 数组并将其存储在 localstorage 中
- 节点.js 'request.get':将主体存储在变量中
- PHP:如何在 PHP 中使用 GET 将值存储到数组中
- 通过JS(PhoneGap)存储来自GET请求的数据
- 使用get/post的免费云数据存储
- Angular.js:存储http.get请求中的变量,以便在不同的$scope函数中全局使用
- JavaScript:如何传递和重置一个增量值到IndexedDB存储get方法
- Coldfusion -如何从$.get()中存储变量
- 将本地存储转换为Chrome存储进行get和set
- ExtJS GET操作在FireFox中存储返回值500
- 对存储的响应出错.get: TypeError: Cannot read property 'style'
- 不能将php $.get()函数的输出存储到javascript变量中
- 如何从一个get请求创建多个JSON存储
- Chrome.storage.sync.get未将值存储在本地变量中
- 将用户ID传递给核心ajax方法GET,以检索谷歌云存储中的数据