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】

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu 配置 kubernetes 学习环境,让外部访问 dashboard

Ubuntu 配置 kubernetes 学习环境 一、安装 1. minikube 首先下载一下 minikube,这是一个单机版的 k8s,只需要有容器环境就可以轻松启动和学习 k8s。 首先你需要有Docker、QEMU、Hyperkit等其中之一的容器环境,以下使用 docker 进行。 对…

CleanMyMac X2024专业免费的国产Mac笔记本清理软件

非常高兴有机会向大家介绍CleanMyMac X 2024这款专业的Mac清理软件。它以其强大的清理能力、系统优化效果、出色的用户体验以及高度的安全性,在Mac清理软件市场中独树一帜。 CleanMyMac X2024全新版下载如下: https://wm.makeding.com/iclk/?zoneid49983 一、主要…

Nuxt2 渲染时html比css加载快,导致闪屏/CSS样式迟滞/抖动问题记录

问题场景: 最近在用Nuxt2重写公司官网,但因为笔者不是专业前端,之前虽然也用vue2来写前端,但是用nuxt2来写项目还是第一次。在开发过程中虽然也磕磕碰碰,但因为开发的是官网,偏CMS型的网站,所以…

Wireshark使用相关

1.wireshark如何查看RST包 tcp.flags.reset1 RST表示复位,用来异常的关闭连接,在TCP的设计中它是不可或缺的。发送RST包关闭连接时,不必等缓冲区的包都发出去(不像上面的FIN包),直接就丢弃缓存区的包发送R…

安科瑞路灯安全用电云平台解决方案【电不起火、电不伤人】

背景介绍 近年来 ,随着城市规模的不断扩大 ,路灯事业蓬勃发展。但有的地方因为观念、技术、管理等方面不完善 ,由此引发了一系列安全问题。路灯点多面广 ,一旦漏电就极容易造成严重的人身安全事故。不仅给受害者家庭带来痛苦 &am…

亚信安全荣获2023年度5G创新应用评优活动两项大奖

近日,“关于2023 年度5G 创新应用评优活动评选结果”正式公布,亚信安全凭借在5G安全领域的深厚积累和创新实践,成功荣获“5G技术创新的优秀代表”和“5G应用创新的杰出实践”两项大奖。 面向异构安全能力的5G安全自动化响应系统 作为5G技术创…

架构师之路--Docker的技术学习路径

Docker 的技术学习路径 一、引言 Docker 是一个开源的应用容器引擎,它可以让开发者将应用程序及其依赖包打包成一个可移植的容器,然后在任何支持 Docker 的操作系统上运行。Docker 具有轻量级、快速部署、可移植性强等优点,因此在现代软件开…

软件接口安全设计规范及审计要点

1.token授权安全设计 2.https传输加密 3.接口调用安全设计 4.日志审计里监控 5.开发测试环境隔离,脱敏处理 6.数据库运维监控审计 项目管理全套资料获取:软件开发全套资料_数字中台建设指南-CSDN博客

自营商城私域商城的选品上货如何借助API实现自动化商品采集商品搜索无货源?

商业智能时代的来临,在线化、网络化、智能化、企业与用户的颗粒度越来越细,满足每个人的个性化要求也是未来商业的重要特征!马云曾经说过,未来的核心资源是数据,数据将成为一家企业动力源,而这一切的基础都…

neo4j相同查询语句一次查询特慢再次查询比较快。

现象&#xff1a; neo4j相同查询语句一次查询特慢再次查询比较快。 分析&#xff1a; 查询语句 //查询同名方法match(path:Method) where id(path) in [244333030] and NOT path:Constructor//是rpc的方法match(rpc_method:Method)<-[:DECLARES]-(rpc_method_cls:Class) -…

ensp配置acl高级配置访问控制列表

拓扑结构 资源已上传 acl访问控制列表 简单配置&#xff1a;控制目的ip地址 高级配置&#xff1a;源ip地址&#xff0c;目的ip地址等。 要求&#xff1a;拓扑三个vlan 10&#xff0c;20&#xff0c;30&#xff0c;通过设置acl使10网段可以访问20网段&#xff0c;但是不可以…

comfyui 代码结构分析

comfyui的服务器端是用aiohtttp写的&#xff0c;webui是fastapi直接构建的&#xff0c;但是其实comfyui的这种设计思路是很好的&#xff0c;也许我们不需要在后端起一个复杂的前台&#xff0c;但是可以借助json结构化pipeline&#xff0c;然后利用node节点流把整个流程重新映射…

在 Linux CentOS 中安装 Docker Engine(Dockers 引擎)【图文详解】

官方文档&#xff1a;https://docs.docker.com/engine/install/centos/ 操作系统要求 如果我们要在 CentOS 中安装 Docker 引擎&#xff0c;那么 CentOS 操作系统需要是以下版本之一的&#xff0c;且是处于维护的 CentOS 版本&#xff1a; CentOS 7CentOS Stream 8CentOS Str…

策略路由-IP-Link-路由协议简介

策略路由 策略路由和路由策略的不同 1.策略路由的操作对象是数据包&#xff0c;在路由表已经产生的情况下&#xff0c;不按照路由表进行转发&#xff0c;而是根据需要&#xff0c;依照某种策略改变数据包的转发路径 2.路由策略的操作对象是路由信息。路由策略的主要实现了路…

Self-Consistency Improves Chain of Thought Reasoning in Language Models阅读笔记

论文链接&#xff1a;https://arxiv.org/pdf/2203.11171.pdf 又到了读论文的时间&#xff0c;内心有点疲惫。这几天还是在看CoT的文章&#xff0c;今天这篇是讲如何利用self-consistency&#xff08;自我一致性&#xff09;来改进大语言模型的思维链推理过程。什么是self-cons…

快速上手Spring Cloud 十一:微服务架构下的安全与权限管理

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

矢量(向量)数据库

矢量(向量)数据库 什么是矢量数据库&#xff1f; 在人工智能领域&#xff0c;大量的数据需要有效的分析和处理。随着我们深入研究更高级的人工智能应用&#xff0c;如图像识别、语音搜索或推荐引擎&#xff0c;数据的性质变得更加复杂。这就是矢量数据库发挥作用的地方。与存…

docker中安装mysql8

阿里云ecs服务器&#xff0c;centos7.9系统&#xff0c;docker中安装mysql8 文章目录 阿里云ecs服务器&#xff0c;centos7.9系统&#xff0c;docker中安装mysql81. 拉取镜像2. 基于宿主机实现mysql8数据目录、配置文件、初始化脚本的挂载2.1 创建3个文件夹&#xff0c;一会创建…

2.2 添加商户缓存

实战篇Redis 2.2 添加商户缓存 在我们查询商户信息时&#xff0c;我们是直接操作从数据库中去进行查询的&#xff0c;大致逻辑是这样&#xff0c;直接查询数据库那肯定慢咯&#xff0c;所以我们需要增加缓存 GetMapping("/{id}") public Result queryShopById(Pat…

AssertionError: extension access disabled because of command line flags解决方案

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文介绍在 Stable Diffusion WebUI 中安装插件时出现 AssertionError: extension access disabled because of comma…