chrome.storage.local.get没有获取数据

时间:2017-09-15 00:11:34

标签: javascript google-chrome google-chrome-extension get

我正在尝试制作需要保存一些文字(网址)的扩展程序。数据设置似乎很好,但尝试检索数据是个问题。

扩展程序清单在内容脚本区域中同时包含弹出式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");
    }
}

1 个答案:

答案 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) ...
});