我是WebExtensions和JavaScript的新手。我尝试使用pageAction
按钮编写一个小扩展程序,只需在点击时将当前网址保存到本地存储空间(即一些非常简单的“最喜欢的”功能)。但是,我在使用chrome.storage.local.set()
和.get()
时遇到了问题。我一直在查看this question和this question中的代码,尝试将其重用于我的目的,但却失败了。这就是我现在所拥有的。
saveURL()
函数应该将数组加载到本地存储中,使用新URL更新它,然后将其保存回本地存储(现在,我只有一个dud字符串,我是&m;试图推进那个阵列。)
async function saveURL() {
console.log("Save URL called.");
var urls = await loadURLs();
console.log(urls);
urls.push("a-new-url")
console.log(urls);
chrome.storage.local.set({'pearsurls': urls});
urls = await loadURLs();
console.log(urls);
return true;
}
loadURLs()
函数应该从本地存储中检索内容。我在storage.local.get()
中使用默认值来在第一次使用时初始化数组。
function loadURLs(){
var pearsurls = []
console.log("Loading all saved URLs");
chrome.storage.local.get({pearsurls: []}, function (result) {
pearsurls = result.pearsurls;
console.log(pearsurls)
});
console.log(pearsurls)
return pearsurls;
}
控制台中的输出给了我:
Save page save.js:52:3
Save URL called. save.js:5:3
Loading all saved URLs save.js:38:3
Array [ ] save.js:43:3
Array [ ] save.js:7:3
Array [ "a-new-url" ] save.js:9:3
Loading all saved URLs save.js:38:3
Array [ ] save.js:43:3
Array [ ]
即。我的loadURLs()
功能似乎没有做任何事......我做错了什么?
答案 0 :(得分:2)
您的loadURLs
函数不是async
或返回Promise
,因此它会立即以空数组结束。
请改为尝试:
function loadURLs(){
console.log("Loading all saved URLs");
return new Promise((resolve, reject) => {
console.log("Promise");
chrome.storage.local.get({pearsurls: []}, function (result) {
console.log(result.pearsurls);
resolve(result.pearsurls);
});
});
}
注意:您的原始函数在chrome.storage.local.get
完成其工作之前结束。数组pearsurls
首先返回空,并在执行代码后随时使用回调function (result) ...
进行填充。