javascript - 本地存储的 Chrome 扩展替代品?

标签 javascript google-chrome-extension storage

我正在寻找一种可以跨网站持续存在的存储机制。我有需要存储的原始数据类型数字/字符串。 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/

相关文章:

javascript - jQuery - 不使用 stopImmediatePropagation() 切换菜单;

javascript - 单击后如何在弹出的 Chrome 扩展程序中保持按钮状态。(JavaScript)

javascript - 从网络应用程序访问 Chrome 扩展程序

javascript - 我需要为我的 Chrome 扩展程序提供什么权限(如果有)才能让它进行远程 AJAX 调用?

database - Django 设计 : storing and retrieving text files

android - 如何在 SD 卡中安装应用程序

javascript - 淡化导航并使其在向下滚动时固定,在向上滚动时淡化

javascript - 了解 Google Places Photos API 的响应

javascript - jquery 检测事件选项卡是否更改

php - “Can' t将图像数据写入路径”-Laravel Image Intervention