Javascript 本地存储的Chrome扩展替代方案?

Javascript 本地存储的Chrome扩展替代方案?,javascript,google-chrome-extension,storage,Javascript,Google Chrome Extension,Storage,我正在寻找一个存储机制,将持续在整个网站。我有需要存储的基本数据类型数字/字符串。localStorage不适用于我,因为它属于同源策略。我需要我的数据在所有网站上都是相同的,但很多都是特定于选项卡的,并通过contentscripts访问 有人能提出一个实现这一目标的合适机制吗 编辑: 我目前正在实现first answers代码,没有太多的外观。我有以下几点 background.html 注意:tabStorage是此函数中的一个类变量 function store(){

我正在寻找一个存储机制,将持续在整个网站。我有需要存储的基本数据类型数字/字符串。localStorage不适用于我,因为它属于同源策略。我需要我的数据在所有网站上都是相同的,但很多都是特定于选项卡的,并通过contentscripts访问

有人能提出一个实现这一目标的合适机制吗

编辑: 我目前正在实现first answers代码,没有太多的外观。我有以下几点

background.html

注意:tabStorage是此函数中的一个类变量

    function store(){
    chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.req == "save") {
        tabStorage[sender.tab.id] = request.data;
       }

    if(request.req == "load") {
        sendResponse(tabStorage[sender.tab.id]);
    }
    });
}
contentscript.js

响应返回未定义的

 chrome.extension.sendRequest({req: "load"}, function(response) {
            console.log("getting stak");
            console.log(response.data);
 });

我做错了什么?代码正在访问load和save,所以我知道它正在往返,但undefined正在返回。为什么?

您需要使用扩展自己的本地存储,您可以从后台页面访问它。如果在内容脚本中需要此信息,则需要使用将请求发送到后台页面,在那里读取该信息,并在响应中将结果发送回内容脚本

更新 如果在浏览器重新启动之间不需要存储来保留值,则不需要本地存储。只需将所有内容存储在后台页面中,并根据标签的ID识别标签即可。只要浏览器打开,背景页就会保留这些值。例如:

内容脚本:

//save
chrome.extension.sendRequest({cmd: "save", data: {param1: "value1", param2: "value2"});
...
//load
chrome.extension.sendRequest({cmd: "load"}, function(response) {
    console.log("tab data:", response)
});
var tabStorage = [];
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "save") {
        tabStorage[sender.tab.id] = request.data;
    }

    if(request.cmd == "load") {
        sendResponse(tabStorage[sender.tab.id]);
    }
});
背景页面:

//save
chrome.extension.sendRequest({cmd: "save", data: {param1: "value1", param2: "value2"});
...
//load
chrome.extension.sendRequest({cmd: "load"}, function(response) {
    console.log("tab data:", response)
});
var tabStorage = [];
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "save") {
        tabStorage[sender.tab.id] = request.data;
    }

    if(request.cmd == "load") {
        sendResponse(tabStorage[sender.tab.id]);
    }
});

背景页不允许我把东西放在每个标签上,对吗?我希望不同的选项卡具有不同的值。@Skizit您所说的选项卡域或实际选项卡是什么意思?我指的是与浏览器中的选项卡类似的实际选项卡。我希望每个选项卡都有自己的存储。@Skizit是否希望在重新启动浏览器后清理此存储?如果希望每个选项卡的本地存储都是唯一的,则可以将其正常存储在内容脚本中。通过访问内容脚本中的localStorage,它将仅用于该网页。如果要进行否决投票,至少要发表评论。