Chrome 未设置本地存储

Chrome not setting local storage

我正在创建一个 Chrome 打包应用程序。我想在用户第一次打开应用程序时显示 EULA。我想用我们Chrome的本地存储来测试应用程序是否已经打开。

这是我的 javascript:

function disagree(){
    chrome.storage.local.set({eula:'false'}, function(result) {
        console.log(result.eula)});
        // console.log returns undefined
        // Returns: TypeError: Cannot read property 'eula' of undefined
    document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
    chrome.storage.local.set({eula:'true'}, function(result) {
        console.log("Set eula: " + result.eula);
        // console.log returns undefined
        // Returns: TypeError: Cannot read property 'eula' of undefined
        chrome.storage.local.get("eula"), function(result){
        console.log("Get Result: " + result.eula)};
        // Returns this error: extensions::uncaught_exception_handler:8 Error in response to 
        // storage.set: Error: Invocation of form get(string) doesn't match definition 
        // get(optional string or array or object keys, function callback)
    });

    document.getElementById("background").style.height = "0%";
    document.getElementById("foreground").style.height = "0%";
    document.getElementById("foreground").style.border = "none";
}

// Creates event listeners
document.addEventListener('DOMContentLoaded', function(){
    document.getElementById("disagree").addEventListener("click", function(){
    disagree();
    }); 
    document.getElementById("agree").addEventListener("click", function(){
    agree();
    });
});

问题是 Chrome 没有将数据存储到本地存储。

我认为问题出在两个小错误上。

设置键值对时相信

chrome.storage.local.set({eula:'false'}, function() {});

eula 应该是一个字符串 {'eula': 'false'} 这可能是它没有首先设置的原因。

它是console.logging未定义的原因是因为 set 不会将结果参数发送到回调函数,只有在 get 方法中才会发生。

如果将 eula 设置为字符串将设置存储对象,那么您的 get 方法应该停止抛出错误。

您没有正确使用 chrome.storage api。看一下 StorageArea.getStorageArea.set api.

的定义
  1. StorageArea.set(object items, function callback)。回调函数没有参数
  2. StorageArea.get(string or array of string or object keys, function callback),你应该把回调作为参数。

所以示例用法如下:

chrome.storage.local.set({ eula: true });
chrome.storage.local.get('eula', function (results) {
    console.log(results.eula);
});

看来我的 get 语法有误。我将 javascript 更改为以下内容:

function disagree(){
    chrome.storage.local.set({'eula':'false'}, function() {
        console.log("False")});
    document.getElementById("eulaDisagree").style.display = "block";
}
function agree(){
    chrome.storage.local.set({'eula':'true'}, function() {
        var eulaV;
        console.log("True");
        chrome.storage.local.get('eula', function(result){
        eulaV = result.eula;
        console.log(eulaV);
        });
    });
    document.getElementById("background").style.height = "0%";
    document.getElementById("foreground").style.height = "0%";
    document.getElementById("foreground").style.border = "none";
}

我不再收到任何错误。一切正常。