我正在寻找一种能够跨网站存储的存储机制。我有原始数据类型数字/字符串,我需要存储。 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);
});
我做错了什么?代码正在访问加载和保存,所以我知道它已经到达那里但返回但未定义。为什么呢?
答案 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]);
}
});