Chrome扩展程序替代本地存储?

Ski*_*zit 7 javascript storage google-chrome-extension

我正在寻找一种可以在网站上存在的存储机制.我有原始数据类型数字/字符串,我需要存储.localStorage对我不起作用,因为它属于同一原产地政策.我需要我的数据在所有网站上都是相同的,但很多是特定于标签的,并通过内容文字访问.

有人可以建议一个合适的机制来实现这一目标吗?

编辑: 我目前正在实施第一个答案代码,并没有太多的外观.我有以下......

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]);
    }
    });
}
Run Code Online (Sandbox Code Playgroud)

contentscript.js

回应正在回归 undefined

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

我究竟做错了什么?代码正在访问加载和保存,所以我知道它已经到达那里但是返回但未定义.为什么?

ser*_*erg 9

您需要使用您从后台页面访问的扩展程序自己的localStorage.如果在内容脚本中需要此信息,则需要使用消息传递将请求发送到后台页面,在那里读取,并将结果发送回响应中的内容脚本.

更新 如果您不需要存储来保持浏览器重新启动之间的值,那么您不需要localStorage.只需将所有内容存储在后台页面中,然后按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)
});
Run Code Online (Sandbox Code Playgroud)

背景页面:

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]);
    }
});
Run Code Online (Sandbox Code Playgroud)