QFD*_*Dev 9 javascript jquery google-chrome google-chrome-extension
我正在尝试使用以下代码在Chrome扩展程序中设置和获取名称值对.
if (!this.Chrome_getValue || (this.Chrome_getValue.toString && this.Chrome_getValue.toString().indexOf("not supported") > -1)) {
this.Chrome_getValue = function (key, def) {
chrome.storage.local.get(key, function (result) {
return result[key];
});
};
this.Chrome_setValue = function (key, value) {
var obj = {};
obj[key] = value;
return chrome.storage.local.set(obj)
}
}
Run Code Online (Sandbox Code Playgroud)
然后我按如下方式调用它们:
Chrome_setValue("City", "London");
var keyValue = Chrome_getValue("City");
Run Code Online (Sandbox Code Playgroud)
问题是keyValue总是"未定义",即使我在尝试回读该值时放置了1秒的延迟.我理解这是因为'chrome.storage.local.get'函数是异步的..以下代码工作正常.
Chrome_setValue("City", "London");
chrome.storage.local.get("City", function (result) {
alert(result["City"]);
});
Run Code Online (Sandbox Code Playgroud)
有什么办法绑定keyValue(使用get)我可以强制代码等待函数返回响应?或许我正在从错误的角度接近这个.基本上我正在寻找一种方法,我可以抽象出在chrome.storage框架内处理数据的方法set和get方法?理想情况下,我可以调用两个简单的函数来设置和检索名称值对.
在我使用localStorage之前,这非常简单.
//Set
localStorage["City"] = "London";
//Get
var keyValue = localStorage["City"];
Run Code Online (Sandbox Code Playgroud)
QF_D,我在这里进行有根据的猜测,所以请做好准备,第一次不会起作用......
..... 开始 :
if (!this.Chrome_getValue || (this.Chrome_getValue.toString && this.Chrome_getValue.toString().indexOf("not supported") > -1)) {
this.Chrome_getValue = function (key, def) {
var dfrd = $.Deferred();
chrome.storage.local.get(key, function (result) {
dfrd.resolve(result[key]);
});
return dfrd.promise();
};
this.Chrome_setValue = function (key, value) {
var dfrd = $.Deferred();
var obj = {};
obj[key] = value;
var listen = function(changes, namespace) {
dfrd.resolve(changes[key]);
chrome.storage.onChanged.removeListener(listen);//remove, to prevent accumulation of listeners
}
chrome.storage.onChanged.addListener(listen);
chrome.storage.local.set(obj);
return dfrd.promise()
}
}
Run Code Online (Sandbox Code Playgroud)
因此,get 和 set 函数应该返回 jQuery 承诺。set 函数返回的 Promise 通过此处StorageChange定义的对象来解析。一般来说,您不需要这个对象,而只是响应正在解决的承诺。
以上所有内容均未经测试。我不太确定:
chrome.storage.onChanged....。应该是吗chrome.storage.local.onChanged....?.removeListener()。如果存在的话,它应该存在addListener,这似乎是合理的,尽管我找不到任何证据。| 归档时间: |
|
| 查看次数: |
3225 次 |
| 最近记录: |