Chrome 插件 storage API 解析

Chrome.storage API 解析

使用 chrome.storage API 存储、检索和跟踪用户数据的更改

一、各模块中的 chrome.storage 内容

1. Service workerruntime 内容

在这里插入图片描述

2. Actionruntime 内容

在这里插入图片描述

3. Contentruntime 内容

在这里插入图片描述

二、权限(Permissions

如果需使用 Storage API,需要在 manifest.json 文件中添加权限

{"permissions": [    "storage"],
}

三、Chrome.storage API 功能

Storage API 提供一种特定于扩展程序的方法来保留用户数据和状态。它类似于 Web 平台的存储 APIIndexedDBStorage),但在设计上是为了满足扩展程序的存储需求

1. Chrome.storage API 主要功能

  • 所有扩展程序上下文(包括扩展程序 Service Worker 和内容脚本)都可以访问 Storage API
  • 可序列化的 JSON 值存储为对象属性
  • Storage API 是异步的,支持批量读取和写入操作
  • 即使用户清除缓存和浏览记录,这些数据仍会保留
  • 即使在无痕模式拆分后,存储的设置也会保留
  • 包含一个用于企业政策的专属只读代管式存储区域

2. 扩展程序如何使用 Web Storage API

尽管扩展程序可以在某些上下文(弹出式窗口和其他 HTML 网页)中使用 Storage 接口(可通过 window.localStorage 访问),但不建议使用该接口,原因如下:

  • 扩展 Service Worker 无法使用 Web Storage API
  • 内容脚本与托管网页共享存储空间
  • 当用户清除浏览记录后,使用 Web Storage API 保存的数据将会丢失

3. 从 Web Storage API 移至 Service WorkerStorage API

  • 使用转换例程和 onMessage 处理程序创建屏幕外文档
  • 在扩展 Service Worker 中,检查 chrome.storage 以获取您的数据
  • 如果找不到您的数据,请创建屏幕外文档并调用 sendMessage() 以启动转换例程
  • 在屏幕外文档的 onMessage 处理程序内,调用转换例程

4. Storage API 存储区域

  • storage.local
    • 数据会存储在本地,并会在移除扩展程序时清除。存储空间上限为 10 MB,但您可以通过请求 “unlimitedStorage” 权限提高上限,建议使用 storage.local 存储大量数据。
  • storage.sync
    • 如果同步功能已启用,数据会同步到用户登录的任何 Chrome 浏览器。如果停用,其行为类似于 storage.local。当浏览器离线时,Chrome 会将数据存储在本地,并在浏览器恢复在线状态后恢复同步。配额限制大约为 100 KB,每项内容 8 KB。建议您使用 storage.sync 来保留已同步的浏览器的用户设置。如果处理的是敏感用户数据,请改用 storage.session。
  • storage.session
    • 在浏览器会话期间将数据保留在内存中。默认情况下,它不会向内容脚本公开,但可以通过设置 chrome.storage.session.setAccessLevel() 来更改此行为。存储空间上限为 10 MB。storage.session 接口是建议 Service Worker 的若干接口之一。
  • storage.managed
    • 管理员可以使用架构和企业政策在受管环境中配置支持扩展程序的设置。此存储区域是只读的。

四、Chrome.storage API 类型(Types

1. AccessLevel

存储区域的访问权限级别

类型为枚举

枚举值
  • TRUSTED_CONTEXTS
    • 用于指定源自扩展程序本身的上下文
  • TRUSTED_AND_UNTRUSTED_CONTEXTS
    • 指定源自该扩展程序外部的上下文

2. StorageArea

存储区域

属性
1. onChanged

在一项或多项更改时触发

  • onChanged: Event

onChanged.addListener 监听 demo

onChanged.addListener((callback: function)=> {...})

callback 参数如下

(changes: object)=>void
2. clear

从存储空间中移除所有内容

clear 函数如下所示:

(callback?: function)=> {...}
3. get

从存储空间中获取一项或多项内容

get 函数如下所示:

(keys?: string|string[]|object,callback?: function)=> {...}

keys: 要获取的单个键、要获取的键的列表,或指定默认值的字典。空列表或对象将返回空的结果对象。传入 null 以获取存储空间的全部内容。

4. getBytesInUse

获取一项或多项内容占用的空间量(以字节为单位)

getBytesInUse 函数如下所示:

(keys?: string|string[],callback?: function)=> {...}

keys: 用于获取总用量的单个键或键列表。空列表将返回 0。传入 null 可获取所有存储空间的总用量

5. remove

从存储空间中移除一项或多项内容

remove 函数如下所示:

(keys: string|string[],callback?: function)=> {...}

keys: 要移除的项的单个键或键列表

6. set

设置多个项

set 函数如下所示

(items: object,callback?: function)=> {...}

items: 一个对象,提供用于更新存储空间的每个键值对。存储空间中的其他键值对不会受到影响

7. setAccessLevel

为存储区域设置所需的访问权限级别
setAccessLevel 函数如下所示:

(accessOptions: object,callback?: function)=> {...}

accessOptions: 对象

  • accessLevel: AccessLevel

3. StorageChange

属性
1. newValue
2. oldValue

五、Chrome.storage API 属性(Properties

1. local

local 存储区域中的内容是每台机器的本地内容

1. 类型

StorageArea 对象

2. 属性
  • QUOTA_BYTES: 10485760
    • 本地存储空间中可存储的数据量上限(以字节为单位),衡量依据是每个值的 JSON 字符串化处理以及每个密钥的长度。如果扩展程序具有 unlimitedStorage 权限,则系统将忽略此值。如果更新会导致超出此限制,则更新会立即失败,并在使用回调时设置 runtime.lastError;如果使用 async/await,则设置被拒的 Promise。

2. managed

managed 存储区域中的内容由域管理员设置,并且对于扩展程序是只读的;尝试修改此命名空间会导致错误。

1. 类型

StorageArea

3. session

session 存储区域中的内容存储在内存中,不会持久保留到磁盘中

1. 类型

StorageArea 对象

属性
  • QUOTA_BYTES: 10485760
    • 可存储在内存中的数据量上限(以字节为单位),计算方式为:估算每个值和键的动态分配内存用量。会导致超出此限制的更新会立即失败,并且会在使用回调或 Promise 遭拒时设置 runtime.lastError。

4. sync

sync 存储区域中的内容会通过 Chrome 同步功能进行同步

1. 类型

StorageArea 对象

2. 属性
  • MAX_ITEMS: 512
    • 同步存储空间中可存储的内容数量上限。会导致超出此限制的更新将立即失败,并在使用回调或 Promise 遭拒时设置 runtime.lastError
  • MAX_WRITE_OPERATIONS_PER_HOUR: 1800
    • 每小时可执行的 set、remove 或 clear 操作次数上限。此上限是每 2 秒 1 次,低于短期的更高每分钟写入次数限制
  • MAX_WRITE_OPERATIONS_PER_MINUTE: 120
    • 每分钟可执行的 set、remove 或 clear 操作次数上限。此速率为每秒 2 次,在更短的时间段内,提供的吞吐量比每小时写入次数更高
  • QUOTA_BYTES: 102400
    • 可存储在同步存储空间中的数据总量(以字节为单位),衡量依据是每个值和每个密钥的长度的 JSON 字符串化处理
  • QUOTA_BYTES_PER_ITEM: 8192
    • 同步存储空间中每一项的大小上限(以字节为单位),衡量依据是相应项的值加上密钥长度的 JSON 字符串化处理

六、Chrome.storage API 事件(Events

1. onChanged

在一项或多项更改时触发

chrome.storage.onChanged.addListener(callback: function,
)

callback 参数如下所示:

(changes: object,areaName: string)=>void

七、示例

1. Storage API 用法示例

chrome.storage.local.set({ key: value }).then(() => {console.log("Value is set");
});chrome.storage.local.get(["key"]).then((result) => {console.log("Value is " + result.key);
});
chrome.storage.sync.set({ key: value }).then(() => {console.log("Value is set");
});chrome.storage.sync.get(["key"]).then((result) => {console.log("Value is " + result.key);
});
chrome.storage.session.set({ key: value }).then(() => {console.log("Value was set");
});chrome.storage.session.get(["key"]).then((result) => {console.log("Value is " + result.key);
});

2. 同步响应存储空间更新

chrome.storage.onChanged.addListener((changes, namespace) => {for (let [key, { oldValue, newValue }] of Object.entries(changes)) {console.log(`Storage key "${key}" in namespace "${namespace}" changed.`,`Old value was "${oldValue}", new value is "${newValue}".`);}
});

3. 从存储空间异步预加载

const storageCache = { count: 0 };
const initStorageCache = chrome.storage.sync.get().then((items) => {Object.assign(storageCache, items);
});chrome.action.onClicked.addListener(async (tab) => {try {await initStorageCache;} catch (e) {}storageCache.count++;storageCache.lastTabId = tab.id;chrome.storage.sync.set(storageCache);
});

引用

  • 【storage】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年学习 AI 路线图

2024 年学习 AI 路线图 一、数学二、工具2.1 Python2.2 PyTorch 三、机器学习3.1 从头开始编写3.2 参加比赛3.3 做副业项目3.4 部署模型3.5 补充材料 四、深度学习4.1 fast.ai4.2 多参加一些比赛4.3 论文实现4.4 计算机视觉4.5 强化学习4.6 自然语言处理 五、大型语言模型5.1 观…

SpringBoot国际化配置流程(超详细)

前言 最新第一次在做SpringBoot的国际化,网上搜了很多相关的资料,都是一些简单的使用例子,达不到在实际项目中使用的要求,因此本次将结合查询的资料以及自己的实践整理出SpringBoot配置国际化的流程。 SpringBoot国际化 "i…

爱思助手验机不靠谱?

1.骗子只能骗的一种人就是有点懂 因为完全不懂的不会感兴趣 骗不到 太懂的人 基本属于猴精的人 你骗不到 2. 3.基本做的是翻新机 维修过的 4。转载 爱思助手验机不靠谱?“报告全绿”已成奸商的阴谋 - 知乎

单片机通俗一点讲究竟是个什么东西?

单片机就是一个微型电脑,它是靠程序工作的,并且可以修改。通过不同的程序实现不同的功能。在开始前我有一些资料,是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信…

智慧公厕四大核心能力,赋能城市公共厕所智能化升级

公共厕所是城市基础设施中不可或缺的一部分,但由于传统的公共厕所在建设与规划上,存在一定的局限性,导致环境卫生差、管理难度大、使用体验不佳等问题,给市民带来了很多不便。而智慧公厕作为城市智能化建设的重要组成部分&#xf…

2024年阿里云服务器8核16G配置活动价格分享,最低仅需1803.17元1年

阿里云服务器8核16G配置2024年活动价格是多少?具体配置还需要看想要购买的云服务器实例规格和配置及带宽大小,目前在阿里云2024年活动中,8核16G配置价格最低的是通用算力型u1实例,价格只要1803.17元1年,除此之外&#…

JAVA------基础篇

java基础 1.JDK JDK :java development kit JRE:java runtime environment JDK包含JRE java跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。 当你想要在Linux系统下运行,则需要…

轻松管理你的热点函数!

之前,我们介绍了卡顿分析下的卡顿帧汇总功能,以便开发者能够更精准地定位和归因项目的卡顿现象。本周,我们将继续介绍本次版本更新的新功能,从函数CPU耗时、资源管理等角度,帮助开发者更细致地洞察项目性能问题&#x…

TCPView下载安装使用教程(图文教程)超详细

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:更多干货,请关注专栏《网络安全自学教程》 TCPView是微软提供的一款「查看网络连接」和进程的工具,常用来查看电脑上的TCP/UDP连接…

明渠流量监测站—实时监测明渠中水流流量和水位

TH-ML2明渠流量监测站是一种专门用于实时监测明渠中水流流量和水位等参数的设施。它通常设置在河流、渠道或其他开放水流明渠中,旨在收集、记录和汇总水流数据,为水利管理部门、研究机构和其他相关方提供决策支持。 明渠流量监测站的工作涉及多个关键步骤…

Go——map操作及原理

一.map介绍和使用 map是一种无序的基于key-value的数据结构,Go语言的map是引用类型,必须初始化才可以使用。 1. 定义 Go语言中,map类型语法如下: map[KeyType]ValueType KeyType表示键类型ValueType表示值类型 map类型的变量默认…

Altair-一个被名字耽误的超强交互式可视化库

今天的推文我们介绍一个功能很强,但知名度不如Matplotlib、pyecharts等静态或者交互式可视化库-Altair。Altair是基于Vega和Vega-Lite的Python数据统计可视化库,其优秀的交互、数据统计功能和清新的配色,很难让人用过就忘记(唯一不好就是名字太难记啦!)。…

2024年的黑马项目,在视频号上开小店,这个机会不容错过!

大家好,我是电商小布。 在互联网的快速发展下,电商这一行可以说是展现出来了前所未有的生机。 也造就了越来越多项目的产生,视频号小店就是其中之一。 有人说,就今年的各大项目情况来看,视频号小店无疑是最大的黑马…

jsp将一个文本输入框改成下拉单选框,选项为字典表配置,通过后端查询

一,业务场景: 一个人员信息管理页面,原来有个最高学历是文本输入框,可以随意填写,现在业务想改成下拉单选框进行规范化,在专科及以下、本科、研究生三个选项中选择; 二,需要解决问…

【Linux】 gcc(linux下的编译器)程序的编译和链接详解

目录 前言:快速认识gcc 1. 程序的翻译环境和执行环境 2.编译和链接 2.1翻译环境 2.2编译环境 1. 预处理 gcc -E指令 test.c(源文件) -o test.i(生成在一个文件中,可以自己指定) 预处理完成之后就停下来&am…

LeetCode 1027——最长等差数列

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 假设我们以 f[d][nums[i]]表示以 nums[i] 为结尾元素间距为 d 的等差数列的最大长度,那么,如果 nums[i]-d 也存在于 nums 数组中,则有: f [ d ] [ n u m s [ i ] ] …

解决vim中NERDTree图标是问号或者乱码问题

解决vim中NERDTree图标是问号或者乱码问题 乱码信息如图解决办法1. 安装字体下载字体安装字体Ubuntu系统Windows11系统 2. 控制台修改字体Ubuntu系统Windows11系统 乱码信息如图 Ubuntu系统上的情况 使用windows控制台连接的情况 解决办法 1. 安装字体 下载字体 在nerd f…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器(1)串口控制寄存器SCON(2)电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

网络面试——浏览器输入url到显示主页的过程

浏览器输入URL到显示主页的过程通常可以分为以下步骤: 1. **URL解析**: - 当用户在浏览器的地址栏中输入URL时,浏览器会首先对该URL进行解析。 - 解析URL包括识别协议(例如HTTP、HTTPS)、主机名(例如…

YOLOv5-小知识记录(一)

0. 写在前面 这篇博文主要是为了记录一下yolov5中的小的记忆点,方便自己查看和理解。 1. 完整过程 (1)Input阶段,图片需要经过数据增强Mosaic,并且初始化一组anchor预设; (2)特征提…