我正在尝试制作需要保存一些文字(网址)的扩展程序。数据设置似乎很好,但尝试检索数据是个问题。
扩展程序清单在内容脚本区域中同时包含弹出式JavaScript和内容JavaScript。
{
"manifest_version": 2,
"name": "Extension_Name",
"version": "0.0.1",
"browser_action": {
"default_title": "Extension_title",
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": ["storage"],
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"js": ["content.js","popup.js"]
}
]
}
网址存储在Chrome本地存储区域中:
var b = document.getElementById("l"); //l is a button
b.onmouseup = function () {
var r = prompt("Please enter the website to add.");
var g = [];
chrome.storage.local.get("whitelist", function (i) {
if (i['whitelist'] !== undefined) {
var g = i['whitelist'];
}
});
g.push(r);
chrome.storage.local.set({
"whitelist": g
}, function () {
console.log("done")
});
}
这似乎有效,我可以手动输入数据的get函数。但是我无法找到在content.js
中使用数据的方法//getting website whitelist
d = null;
var inw = false;
chrome.storage.local.get("whitelist", function (p) {
d = p['whitelist'];
}); //why doesnt this work???
console.log(d); //testing (returns null in the console...)
for (var j in d) { //this script doesnt run because d is not set to an array
alert(window.location.host.replace(/\./g, ""));
if (d[j].replace(/\./g, "").replace(/:\/\//g, ".")
.split(".")[1] === window.location.host.replace(/\./g, "")) {
inw = true;
alert("true");
}
}
答案 0 :(得分:0)
我看到了一些可能的问题:
在您的第二个代码段中,var g = i['whitelist']
在新的较窄范围内声明,并且未使用原始g
。此外,g
中的g.push(r)
仍然是[]
,因为它是在chrome.storage.local.get()
调用其回调函数之前执行的,并且要使用现有的白名单。
// edited version
var g = [];
chrome.storage.local.get("whitelist", function(i) {
if (i['whitelist'] !== undefined) {
g = i['whitelist'];
}
g.push(r);
chrome.storage.local.set({"whitelist": g}, function(){console.log("done")});
});
在第三个代码段中,您没有使用回调中返回的值,并且console.log(d)
为空,因为它在回调更改d
之前正在运行。
// edited version
chrome.storage.local.get("whitelist", function(p) {
d = p['whitelist'];
console.log(d);
for (var j in d) ...
});