Chrome 插件 storage API 解析

news2024/9/30 9:19:47

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.coloradmin.cn/o/1550251.html

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

相关文章

SPU赋能PSI:探秘隐私集合求交核心技术与高级调度架构实践

1.SPU实现的PSI介绍 1.PSI的定义和种类 隐私集合求交(Private Set Intersection, PSI)是一种在密码学和安全多方计算(MPC)领域中的关键技术,允许两个或多个参与者在不泄露各自输入集合中非交集部分的前提下&#xff…

【python分析实战】成本:揭示电商平台月度开支与成本结构占比 - 过于详细 【收藏】

重点关注本文思路,用python分析,方便大家实验复现,代码每次都用全量的,其他工具自行选择。 全文3000字,阅读10min,操作1小时 企业案例实战欢迎关注专栏 每日更新:https://blog.csdn.net/cciehl/…

深入理解element-plus table二次封装:从理论到实践的全面指南

前言 在许多中后台管理系统中,表格占据着半壁江山,如果使用element plus组件库,那么少不了要用到table组件,可是table组件的功能过于基础,因此,我在table组件的实现基础之上进一步封装,从而实现…

2024-03-24 需求分析-智能问答系统-调研

一. 需求列表 基于本地知识库的问答系统对接外围系统 数字人语音识别二. 待调研的公司 2.1 音视贝 AI智能外呼_大模型智能客服系统_大模型知识库系统_杭州音视贝 (yinshibei.com) 2.2 得助智能 智能AI客服机器人-智能电话机器人客服-电话电销机器人-得助智能 (51ima.com) 2…

【LVGL-使用SquareLine Studio设计器 】

LVGL-使用SquareLine Studio设计器 ■ 简介■ 安装■ SquareLine Studio移植到工程 ■ 简介 SquareLine Studio 设计器是一个付费软件。 ■ 安装 SquareLine Studio 设计器的下载地址 我们点击“WINDOWS”下载 SquareLine Studio 设计器,下载完成之后我们就会得到…

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率,做了内存优化和下载导出优化,具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍: 一.拍摄前预览页面优化 预览效果问题 存在…

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

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

vuees6新语法

vue的学习网站: https://www.runoob.com/vue2/vue-tutorial.html1.Vue的介绍 学习目标 说出什么是Vue能够说出Vue的好处能够说出Vue的特点 内容讲解 【1】Vue介绍 1.vue属于一个前端框架,底层使用原生js编写的。主要用来进行前端和后台服务器之间的…

搜索插入位置-java

题目描述 : 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 思路分析: 这段代码的解题思想是利用二分查找的方法在…

微服务(基础篇-006-Docker安装-CentOS7)

目录 05-初识Docker-Docker的安装_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p46&spm_id_frompageDriver&vd_source60a35a11f813c6dff0b76089e5e138cc 0.安装Docker 1.CentOS安装Docker 1.1.卸载(可选) 1.2.安装dock…

爬虫工作量由小到大的思维转变---<第六十章 Scrapy框架中的信号处理机制(Signals)研究(1)>

前言: Scrapy框架默认的事件驱动设计在某些场景下可能不够灵活或满足定制化需求。因此,深入研究Scrapy框架中的信号处理机制(Signals)是必要的。 本研究的目的是深入了解Scrapy框架中的信号处理机制,在网络爬虫中的应用和意义。通…

软考高级架构师:ESB 企业服务总线概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

正则表达式 vs. 字符串处理:解析优势与劣势

title: 正则表达式 vs. 字符串处理:解析优势与劣势 date: 2024/3/27 15:58:40 updated: 2024/3/27 15:58:40 tags: 正则起源正则原理模式匹配优劣分析文本处理性能比较编程应用 1. 正则表达式起源与演变 正则表达式(Regular Expression)最早…

单链表交叉分离,运用头插法,尾插法(算法库应用)

原文博客链接:单链表分离(头插法和尾插法的结合,理解指针变换)_3.对任务1或者2中创建的某一个单链表{a1,b1,a2,b2,...,an,bn},编写一个算法将-CSDN博客 函数实现: /************************************************** 函数名:separate_LinkList 功 能: 把一个链表,交叉新建…

风力发电电网系统的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1风力发电原理与风机数学模型 4.2 电力电子变换器模型 4.3并网控制策略 5.完整工程文件 1.课题概述 风力发电电网系统的simulink建模与仿真。 2.系统仿真结果 3.核心程序与模型 版本:…

数据通信基础(网络工程师)

数据通信基础 需要掌握的内容: (1)信道特性。 (2)调制和编码,包括ASK、FSK、PSK、QPSK、采样定理、PCM、编码。 (3)传输技术,包括通信方式(单工/半双工/全双…

如何备考2025年AMC8竞赛?吃透2000-2024年600道真题(免费送题

最近有家长朋友问我,现在有哪些类似于奥数的比赛可以参加?我的建议可以关注下AMC8的竞赛,类似于国内的奥数,但是其难度要比国内的奥数低一些,而且比赛门槛更低,考试也更方便。比赛的题目尤其是应用题比较有…

CCF-CSP认证考试 202212-3 JPEG 解码 100分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202212-3 JPEG 解码 时间限制: 1.0s 内存限制: 512.0MB 问题背景 四年一度的世界杯即将画上尾声。在本次的世界杯比赛中,视频助理裁判&…

YOLOv8项目实践——目标检测、实例分割、姿态估计、目标追踪算法原理及模型部署(Python实现带界面)

简介 Ultralytics YOLOv8是一种前沿的、最先进的(SOTA)模型,它在前代YOLO版本的成功基础上进行了进一步的创新,引入了全新的特性和改进,以进一步提升性能和灵活性。作为一个高速、精准且易于操作的设计,YO…