浏览器扩展V3开发系列之 chrome.storage 的用法和案例

【作者主页】:小鱼神1024

【擅长领域】:JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等

chrome.storage 是用于存储、获取用户数据的 API。当我们需要持久化存储数据时,比如:登录状态,用户扩展选项配置等等,使用 chrome.storage 是一个不错选择。

在使用 chrome.storage 之前,需要在 manifest.json 中声明权限:
image.png

{"manifest_version": 3,"name": "chrome.storage","description": "chrome.storage API 基础用法","version": "1.0","action": {"default_popup": "popup.html","default_icon": "icons/icon128.png"},"background": {"service_worker": "background.js"},"permissions": ["storage"]
}
1、chrome.storage.local

chrome.storage.local 是我们开发扩展时用的最多的一个 API,它主要作用:将数据存储在本地,与设备绑定。数据存储后,需手动删除,否则将一直存在。当扩展程序移除后数据也会被清除。

如果我们想在插件安装时,记录扩展的版本,可以这样写:
image.png

chrome.runtime.onInstalled.addListener(() => {// 初始化版本chrome.storage.local.set({ version: chrome.runtime.getManifest().version });// 获取当前版本chrome.storage.local.get("version", (data) => {console.log("version:", data.version);});
});

当安装扩展时,Service Worker 控制台将打印:
image.png

如果我们想查看该扩展下,所有通过 chrome.storage.local 的数据,由于官方没有提供此 API,不过可以这样实现:
image.png

  // 获取所有local存储的数据chrome.storage.local.get(null, function (locals) {console.log("locals:", locals);});

打印将得到如下结果:
image.png
同时,chrome.storage 调用都是异步执行的,所以我们也可以使用 async/await 来操作它,比如:
image.png
同样的,打印结果:
image.png

通过 chrome.storage.local.set 存储数据后,如何删除它们呢?
提供了两种方法:

  • chrome.storage.local.remove

它可以删除指定数据,如下:
image.png

  // 移除指定数据chrome.storage.local.remove("version", function () {console.log("version removed");});

打印结果如下:
image.png

  • chrome.storage.local.clear

使用 chrome.storage.local.clear 可以将 local 存储的数据全部清除
image.png
打印结果如下:
image.png
同时,我也可以通过 chrome.storage.onChanged.addListener 监听数据变化:
image.png

chrome.runtime.onInstalled.addListener(async () => {// 移除所有数据chrome.storage.local.clear()// 初始化版本chrome.storage.local.set({ version: chrome.runtime.getManifest().version });// 监听数据变化chrome.storage.onChanged.addListener((changes, namespace) => {Object.keys(changes).forEach((key) => {const { oldValue, newValue } = changes[key];console.log(`${key}: ${oldValue} -> ${newValue}`);});});
});

我们这里做了两个操作,先移除,再设置。
打印结果:
image.png
第一个打印是先移除时,监听到的。
第二个打印是设置时,监听到的。

2、chrome.storage.session

chrome.storage.session 是将数据存储在会话中,只在当前会话可用。

3、chrome.storage.sync

如果开启同步,数据会与用户的 Google 账号同步,可以跨设备使用。如果没有开启同步,其作用和 chrome.storage.local 类似。

由于chrome.storage.session 和 chrome.storage.sync 在用法上和 chrome.storage.local 一致。就不举例说明了。

代码地址:传送门

总结
  • chrome.storage.local:数据存储在本地,与设备绑定,扩展程序移除后数据会被清除
  • chrome.storage.sync:如果开启同步,数据会与用户的 Google 账号同步,可以跨设备使用
  • chrome.storage.session:数据存储在会话中,只在当前会话可用

创作不易,动动您发财的小手,点赞关注一波,支持我创作更多对您有帮助的文章!

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

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

相关文章

昇思25天学习打卡营第3天|linchenfengxue

ResNet50迁移学习 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的基础数据集上训练得到一个预训练模型,然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用…

目标检测系列(四)-利用pyqt5实现yolov8目标检测GUI界面

1、pyqt5安装 Qt Designer:一个用于创建图形用户界面的工具,可轻松构建复杂的用户界面。它基于MVC架构,可以将界面设计与逻辑分离,使得开发更为便捷。在Qt Designer中,可以通过拖拽控件来灵活地调整界面,并…

11. Java线程的状态详解

1. 前言 本节内容主要是对多线程的 6 种状态进行详细讲解,具体内容点如下: 抛开语言,谈操作系统的线程的生命周期及线程 5 种状态,这是我们学习 Java 多线程 6 种状态的基础;掌握 Java 的线程生命周期及 6 种线程状态…

电脑没声音是什么原因?一篇文章帮你解决疑惑

在使用电脑时,声音是至关重要的一部分,无论是播放音乐、观看视频还是进行视频会议。然而,有时候电脑可能会出现没声音的情况,这让人感到非常困扰。那么电脑没声音是什么原因呢?本文将详细介绍解决电脑没声音问题的三种…

机器人自主学习方法学习

各类算法的优缺点 原理: 该结构中初始的知识为0,不存在任何先验知识,让机器人与环境交互不断获得经验,是一个增量学习的过程。 算法举例 基于强化学习的开源算法及工具 OpenAI Gym:用于开发和比较强化学习算法的工具…

电脑开不了机怎么办?无响应就试试这3个方法,快速解决黑屏

当电脑突然变得沉默寡言,没有任何响应,屏幕只剩下一片漆黑时,不仅会打断我们的计划,还可能让我们感到无助和焦虑。电脑开不了机怎么办呢?如果你正面临这样的困境,别担心,本文将引导你通过三个简…

姚期智、张亚勤、薛澜、Stuart Russell、Max Tegmark,DeepMind研究员等共话全球AI治理丨大会回顾...

为什么AI安全已迫在眉睫?如何构建全球范围内的合作?民众该如何参与到其中?未来的AI系统将是什么样的? 2024年6月15日,智源大会第二天,多位AI安全领域专家进行圆桌讨论,连接中国北京和美国加利福…

Go语言循环语句

在Go语言中,循环语句用于重复执行一段代码,直到满足特定的条件为止。Go语言提供了几种不同类型的循环语句,包括for循环、range循环和goto配合标签的循环(虽然goto在Go中不常用且通常不推荐用于循环)。不过,…

Unity编辑器工具---版本控制与自动化打包工具

Unity - 特殊文件夹【作用与是否会被打包到build中】 Unity编辑器工具—版本控制与自动化打包工具: 面板显示:工具包含一个面板,用于展示软件的不同版本信息。版本信息:面板上显示主版本号、当前版本号和子版本号。版本控制功能…

springmvc处理ajax请求

文章目录 9、springmvc处理ajax请求9.1RquestBody请求9.2ResponseBody9.3RestController注解 9、springmvc处理ajax请求 9.1RquestBody请求 RquestBody可以获取请求体信息,使用RquestBody注解标识控制器方法的形参,当前的请求的请求体就会为当前注解所…

vben admin BasicModal和BasicForm的使用

工作笔记,只供参考 一、BasicModal使用 1.创建文件为component在里面创建index.vue 注意 v-bind"$attrs"记得写,用于将弹窗组件的 attribute 传入 BasicModal 组件 1.register:BasicModal的配置项 2.title:标题 3.ok:点击确认按钮 4.closeMo…

企业数据挖掘平台产品特色及合作案例介绍

泰迪企业数据挖掘平台是一款通用的、企业级、智能化的数据分析模型构建与数据应用场景设计工具,能够一体化地完成数据集成、模型构建、模型发布,为数据分析、探索、服务流程提供支撑,提供完整的数据探索、多数据源接入、特征处理、模型搭建、…

基于KNN的旋转机械故障诊断(MATLAB)

KNN算法又称K-近邻算法,其主要思想是:对于要分类的样本按照一定的相似性度量方法寻找与之最近的K个邻居,计算这K个邻居中类别出现次数最多的那个类作为该样本所属类。其算法步骤如下。 (1)计算待分类样本与训练集中各个数据之间的距离。 (2…

mybatis-plus 实体中空字段更新不上

FieldStrategy 是一个枚举类型,它定义了字段的几种策略: IGNORED:忽略判断,所有字段都进行更新操作 NOT_NULL:非 NULL 判断(默认策略),字段非 NULL 才进行更新 NOT_EMPTY&#xff…

Kompas AI数据分析与预测功能对比

一、引言 在现代商业环境中,数据分析与预测是企业制定战略决策的关键工具。通过对大量数据的分析,企业能够识别趋势、预测未来变化,并做出更为明智的决策。本文将对比Kompas AI与其他主要AI产品在数据分析与预测方面的能力,展示K…

【芯片】MCU的分类

MCU又称单片微型计算机(Single Chip Microcomputer )或者单片机,是把中央处理器(Central Process Unit;CPU)的频率与规格做适当缩减,并将内存(memory)、计数器(Timer)、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都…

智能扫地机,让生活电器更加便民-NV040D扫地机语音方案

一、语音扫地机开发背景: 随着人工智能和物联网技术的飞速发展,智能家居设备已成为现代家庭不可或缺的一部分。其中,扫地机作为家庭清洁的重要工具,更是得到了广泛的关注和应用。 然而,传统的扫地机在功能和使用上仍存…

「UCD」浅谈UIUX设计与UE落地

UCD产品设计中心在UIUX设计与UE实现方面,特别强调了组件化设计的重要性和实践方法。关于组件化设计详解的要点,结合具体案例和访问链接。 组件化设计的定义 组件化设计是一种将界面分解为可复用组件的方法。这种方法类似于搭积木,每个组件既独立又统一,可以自由组合、替换…

计算机网络之入门

1.网络的发展 1.1计算机网络定义 计算机网络是以共享资源(硬件、软件和数据等)为目的而连接起来的、在协议控制下,由一台或多台计算机、若干台终端设备、数据传输设备等组成的系统之集合。 这些计算机系统应当具有独立自治的能力&#xff…

无芯封装基板适用于先进封装技术 我国行业发展面临一定挑战

无芯封装基板适用于先进封装技术 我国行业发展面临一定挑战 无芯封装基板指去除作为核心支撑层的芯板,仅由积层板构成的封装基板。与传统带有芯层的封装基板相比,无芯封装基板具有轻量化、密度高、信号传输质量高、散热性能好、布线灵活性好等优势&#…