我正在寻找一种可以跨网站持续存在的存储机制。我有需要存储的原始数据类型数字/字符串。 localStorage 对我不起作用,因为它属于同源策略。我需要我的数据在所有网站上都相同,但更多的是特定于选项卡并通过内容脚本访问。
有人可以建议一种合适的机制来实现这一点吗?
编辑: 我目前正在实现第一个答案代码并且没有太多关注。我有以下...
背景.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);
});
我做错了什么?代码正在访问加载和保存,所以我知道它来来回回但未定义正在返回。为什么?
最佳答案
您需要使用您从后台页面访问的扩展程序自己的 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]);
}
});
关于javascript - 本地存储的 Chrome 扩展替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5872564/