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

时间:2011-05-03 16:22:48

标签: javascript google-chrome-extension storage

我正在寻找一种能够跨网站存储的存储机制。我有原始数据类型数字/字符串,我需要存储。 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]);
    }
    });
}

contentscript.js

响应正在返回undefined

 chrome.extension.sendRequest({req: "load"}, function(response) {
            console.log("getting stak");
            console.log(response.data);
 });
我做错了什么?代码正在访问加载和保存,所以我知道它已经到达那里但返回但未定义。为什么呢?

1 个答案:

答案 0 :(得分:9)

您需要使用您从后台页面访问的扩展程序自己的localStorage。如果您需要在内容脚本中使用此信息,则需要使用messaging向后台页面发送请求,在那里阅读,然后将结果发送回响应中的内容脚本。

<强>更新 如果您不需要存储来保持浏览器重新启动之间的值,那么您不需要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)
});

背景页:

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]);
    }
});