2011-05-03 149 views
7

我正在寻找一个存储机制,将坚持跨网站。我有我需要存储的基本数据类型数字/字符串。 localStorage不适用于我,因为它属于相同的原产地策略。我需要我的数据在所有网站上都是相同的,但很多都是特定于标签并通过内容访问。Chrome扩展替代本地存储?

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

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

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

我做错了什么?该代码正在访问加载和保存,所以我知道它是在那里并返回,但未定义返回。为什么?

+0

至少评论,如果你要downvote。 – Skizit 2011-05-04 09:26:00

回答

9

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

UPDATE 如果您不需要存储来保存浏览器之间的值,然后重新启动你不需要的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]); 
    } 
}); 
+0

背景页面不会让我保持每个标签的基础上,对吧?我需要不同标签的不同值。 – Skizit 2011-05-03 16:38:36

+0

@Skizit你是什么意思的标签域或实际选项卡? – serg 2011-05-03 16:42:30

+0

我的意思是像浏览器中的选项卡一样的实际选项卡。我希望每个选项卡都有自己的存储空间。 – Skizit 2011-05-03 16:44:48

相关问题