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

news2024/11/18 12:22:33

【作者主页】:小鱼神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.coloradmin.cn/o/1864112.html

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

相关文章

Ubuntu 20.04安装中文输入法出错:gnome-user-docs-zh-hans安装失败

问题:Ubuntu20.04安装中文输入法出错:gnome-user-docs-zh-hans安装失败 现象: 打开language Support页面的时候,提示install依赖的文件 这个过程中会弹窗提示: The following packages have unmet dependencies:gnome-user-doc…

全网最全的国外心理学资源导航站

想学心理学不知道去哪儿看权威的内容? 中文搜索心理学广告多? Kuakua | 发现心理学网站,应用程序和AI工具https://kuakua.app/explore 从心理学AI工具(国内外)到心理学专业院校、心理学期刊论文、心理学线上课程、心…

论文影响因子

谷歌搜索 谷歌一般只能看到期刊或者会议名字 搜索内容 官方评级网站 LetPub

AI助阵,高考志愿不再“盲选“:告别老土选校法,用科技选未来!

填志愿 即将到来的是高考成绩的公布日,对于今年参加高考的学生们来说,此刻的心情无疑是复杂而紧张的。然而,成绩的公布并非终点,而是一个新的开始。紧接着,学生们将面临一个至关重要的挑战——填报高考志愿。 这一过…

集成电路各类电源标号

目录 一、VCC/VEE 二、VDD/VSS 三、VBAT(battery) 四、电源的图形符号 参考:五花八门的电源标号该怎么看--单片机数模电路图原理图看懂VCC VEE VDD VSS GND的含义--洋桃电子大百科P011_哔哩哔哩_bilibili 一、VCC/VEE 在三极管电路中&am…

【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录 核心数据类型深入探索 基础数值与文本类型 日期与时间类型 特殊与复合类型 JSON与HSTORE 表的创建、修改与管理 创建与修改表结构 索引与性能优化 约束与数据完整性 核心数据类型深入探索 PostgreSQL以其多样化的数据类型著称,不仅包括标准SQL数据类型…

Nuxt3: 强制删除__NUXT_DATA__的一种方式

一、问题描述 环境:Node 18.14.0,Nuxt 3.12.2 with Nitro 2.9.6 后台粉丝提问,能否在Nuxt3的页面中不要生成__NUXT_DATA__,因为里面包含了接口返回的数据,感觉数据暴露并且加大了页面的html内容的大小: &l…

微软Win11 22H2/23H2六月更新补丁KB5039302发布!附完整更新日志

2024 年 6月 26 日最新消息,微软为 Windows 11 用户发布了六月最新的更新补丁KB5039302。对于 22H2 版本的用户,系统版本号将升级至 22621.3810;而对于 23H2 版本,版本号则提升至 22631.3810。此次更新将在“设置”主页上添加了新…

核密度估计kde的本质

核密度估计的本质就是插值,不是拟合,只是不要求必须过已知点。 核为box窗函数 核为高斯函数

用ChatGPT快速打造一个专业WordPress网站

作为一个使用HostEase多年的老用户,我想和大家分享一下如何利用HostEase和ChatGPT快速构建一个WordPress网站的经验。这不仅仅是一个简单的操作步骤,更是一次从零到有的实战经历。希望我的分享能给你们带来一些实用的帮助。 获取主机服务和域名 首先&a…

CST软件中滤波器中外部耦合偏小怎么办

在电磁仿真领域,CST Studio Suite(CST 工作室套装)软件以其强大的功能和易用性而广受工程师和科研人员的青睐。然而,在使用CST软件进行滤波器设计时,有时会遇到外部耦合偏小的问题,这可能导致滤波器的性能不…

GPT-5的即将登场

人工智能领域正经历着一场前所未有的变革,而其中大语言模型的进步尤为瞩目。继GPT-4取得巨大成功后,OpenAI即将推出的GPT-5被寄予厚望。作为新一代大语言模型,GPT-5在各个方面都有望实现显著突破。本文将探讨GPT-5的潜在特性、应用前景以及其…

求职季必读:毕业求职,这些坑你千万别踩

前言 毕业季,对于每一位即将步入社会的学子来说,都是一个充满挑战和机遇的时刻。作为我的一位好朋友也是好学长,他刚刚在一家顶尖科技公司斩获了他梦寐以求的职位。他深知求职路上的艰辛,因此打算把自己的经验分享给大家&#xf…

ClickHouse 24.5 版本发布说明

本文字数:12168;估计阅读时间:31 分钟 审校:庄晓东(魏庄) 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shanghai User Group第1届 Meetup 讲师招募中,欢迎讲师在文末扫码报名&…

windows系统根据端口查询pid并结束进程 netstat taskkill

用管理员权限打开命令指示符,输入命令: 1、查看被占用端口所对应的 PID netstat -aon|findstr “端口号” 2、查看指定PID的进程 tasklist|findstr ”14816” 3、结束进程 taskkill -pid 进程号 -f

从零开始学习Linux(10)----动静态库

目录 1.制作静态库 1.编写源代码 2.编译 3.打包库 4.使用库 2.制作动态库 1.编译 2.打包库 3.总结 3.理解动态库加载 1.站在系统角度理解 2.谈谈编址,可执行程序 1.制作静态库 1.编写源代码 假设你编写了两个源代码文件mymath.c和myprintf.c以及它们对应…

数据平台发展史-从数据仓库数据湖到数据湖仓

做数据的同学经常听到一些数据相关的术语,常见的包括数据仓库,逻辑数据仓库,数据湖,数据湖仓/湖仓一体,数据网格 data mesh,数据编织 data fabric等. 笔者在这里回顾了下数据平台的发展史,也介绍和对比了下…

分享:Wordpress插件-AI Image Pro v2.6.0中文版语言包

AI Image Pro是一个wordpress插件,可将您的 WordPress 网站直接与最佳图像生成 A模型(DALL.E和稳定扩散)集成,并允许您利用 AI 生成图像、编辑(内画)图像和创建图像变体。最重要的是,它配备了许多一键式滤镜和许多微调选项,您可以使用它们来增强和创建令…

【JVM-1】JVM内存结构

目录 什么是JVMJava源码执行机制class文件的组成部分 JVM跨平台原理JVM的组成堆年轻代与老年代对象分配过程GC类型Full GC触发条件:对象进入老年代的触发条件 对象分配过程: 字符串常量池静态变量线程本地分配缓冲区(TLAB)TLAB相关…

昇思25天学习打卡营第3天 | 数据集 Dataset

数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)和数据变换(Transforms)实现高效的数据预处理。其中Dataset是Pipel…