Chrome没有设置本地存储

Chrome not setting local storage

本文关键字:存储 设置 Chrome      更新时间:2023-09-26

我正在创建一个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 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);
});

我认为这个问题来自两个小错误。

我相信在设置键值对时

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

eula应该是一个字符串{'eula': 'false'}这可能就是为什么一开始就没有设置它的原因。

是控制台的原因。日志未定义是因为set没有向回调函数发送结果参数,而这只发生在get方法中。

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

我似乎有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";
}

我不再得到任何错误。