目录

storage简介

local

session

sync

常用方法

存储数据:chrome.storage.(api).set(object,callback)

获取数据:chrome.storage.(api).get(keys,callback)

删除数据:chrome.storage.(api).remove(keys,callback)

清空数据:chrome.storage.(api).clear(callback)

计算占用:chrome.storage.(api).getBytesInUse(keys,callback)

监听事件

onChanged.addListener(listener)

其它


storage简介

chrome.storage API提供数据的存储读取删除数据监听事件等功能

chrome.storage有三个存储区域:“local”、“sync”、“session”,三个存储区域都支持相同的方法,用法完全一样仅存储特性不同。因此下面在说明方法时,将不重点介绍某一个存储区域的某一个方法,因为它们的方法都是一样的。

storage API使用前必须在manifest.json里声明“storage”权限

{
  "manifest_version": 3,
  "name": "我的扩展",
  "permissions": ["storage"],  // 必须声明此权限
  // 其他配置...
}

local

local主要用于在用户本地设备持久化存储数据

local五大特性

  1. 本地持久化:数据存储在用户的本地设备硬盘中,不会随浏览器关闭而消失,除非用户手动清除
  2. 存储范围:仅在当前设备生效,不会跨设备同步(仅在当前浏览器生效)
  3. 存储容量:限制较宽松,取决于设备的存储空间
  4. 访问权限:仅同一插件内部可以访问
  5. 异步操作:所有方法均为异步执行

session

session主要用于保存插件的临时数据

session五大特性

  • 生命周期:仅在当前Chrome会话(所有Chrome窗口)有效,关闭所有Chrome窗口后数据自动情况(关闭某个标签页不影响)
  • 存储容量:约10MB
  • 访问权限:仅同一插件内部可以访问
  • 持久化能力:数据不写入磁盘,浏览器崩溃或重启后数据会丢失
  • 异步操作:所有方法均为异步执行

sync

sync专门用于在用户登录Google账号的所有Chrome设备间同步数据,适合存储需要跨设备共享的少量关键信息

sync五大特性

  • 同步机制:自动将数据同步到用户所有登陆相同Google账号的Chrome设备,设备联网时保持数据一致
  • 存储机制:单挑数据 <= 8KB,总存储容量约100KB
  • 生命周期:持久存储,除非用户手动清除扩展数据或扩展主动删除
  • 使用场景:仅适合存储少量关键数据,不适合大量数据
  • 性能特点:同步操作有延迟,短时间内多次修改会合并同步

常用方法

存储数据:chrome.storage.(api).set(object,callback)

功能:存储键值对数据(覆盖已存在的键)

适用区域local、sync、session均支持

语法

// 语法 api -> local / session / sync
chrome.storage.(api).set(Object,callback)

参数说明

  • object必填):键值对集合,键为字符串,值为JSON可序列化类型
  • callback选填):操作完成后的回调函数,无参数

例子

// local区域存储
chrome.storage.local.set({
    testLocalKey:"testLocalValue"
}).then(() => {
    console.log('local区域已存储数据')
})
// session区域存储
chrome.storage.session.set({
    testSessionKey:"testSessionValue"   
}).then(() => {
    console.log('session区域已存储数据')
})
// sync区域存储
chrome.storage.sync.set({
    testSyncKey:"testSyncValue"
}).then(() => {
    console.log('sync区域已存储数据')
})

效果

获取数据:chrome.storage.(api).get(keys,callback)

功能:获取存储的数据(支持指定键或所有数据)

适用区域local、sync、session均支持

语法

// 语法 api -> local / session / sync
chrome.storage.(api).get(keys,callback)

参数说明

  • keys选填):
    • 若为String:获取单个键的数据
    • 若为Array:获取多个键的数据
    • 若为null不填:获取当前存储区域的所有数据
    • 若为Object:以“默认值”形式获取,当键不存在时返回Object键的值
  • callback必填):
    • 回调参数为Object,包含获取到的键值对

例子

// local区域
chrome.storage.local.set({
    testLocalKey:"testLocalValue"
}).then(() => {
    chrome.storage.local.get("testLocalKey").then((res) => {
        console.log('local区域已存储数据',res)
    })
})
// session区域
chrome.storage.session.set({
    testSessionKey:"testSessionValue"   
}).then(() => {
    chrome.storage.seesion.get("testSessionKey").then((res) => {
        console.log('session区域已存储数据',res)
    })
})
// sync区域
chrome.storage.sync.set({
    testSyncKey:"testSyncValue"
}).then(() => {
    chrome.storage.sync.get('testSyncKey').then((res) => {
        console.log('sync区域已存储数据',res)
    })
})

效果

删除数据:chrome.storage.(api).remove(keys,callback)

功能:删除指定键的数据

适用区域local、sync、session均支持

语法

// 语法 api -> local / session / sync
chrome.storage.(api).remove(keys,callback)

参数说明

  • keys必填):要删除的键,单个键使用字符串,多个键使用数组
    • 类型:String、Array
  • callback选填):操作完成后的回调函数,无参数

例子

// local区域
chrome.storage.local.remove("testLocalKey").then(() => {
    console.log('local区域已删除testLocalKey')
})
// session区域
chrome.storage.session.remove("testSessionKey").then(() => {
    console.log('session区域已删除testSessionKey')
})
// sync区域
chrome.storage.sync.remove('testSyncKey').then(() => {
    console.log('sync区域已删除testSyncKey')
})

效果

清空数据:chrome.storage.(api).clear(callback)

功能:清空当前区域的所有数据

使用区域:local、sync、session

语法

chrome.storage.(api).clear(callback)

参数说明

  • callback选填):操作完成后的回调函数

例子

// local区域
chrome.storage.local.clear(() => {
    console.log('local区域已清除')
})
// session区域
chrome.storage.session.clear(() => {
    console.log('session区域已清除')
})
// sync区域
chrome.storage.sync.clear(() => {
    console.log('sync区域已清除')
})

效果

计算占用:chrome.storage.(api).getBytesInUse(keys,callback)

功能:计算指定键(所有键)占用的存储空间

使用区域local、sync、session均支持(对sync尤其重要,监控是否超出100KB限制)

语法

// 语法 api -> local / session / sync
chrome.storage.(api).getBytesInUse(keys,object)

参数说明

  • keys选填):
    • 类型:String、Array、null
    • 若为null或不填,计算当前存储区域的所有数据的总占用空间
  • callback必填):回填参数为Number类型,表示占用的字节数

例子

// local区域
chrome.storage.local.getBytesInUse((bytes) => {
    console.log('local区域已使用' + bytes + '字节')
})
// session区域
chrome.storage.session.getBytesInUse((bytes) => {
    console.log('session区域已使用' + bytes + '字节')
})
// sync区域
chrome.storage.sync.getBytesInUse((bytes) => {
    console.log('sync区域已使用' + bytes + '字节')
})

效果

监听事件

onChanged.addListener(listener)

功能:监听所有存储区域的数据变化(新增、修改、删除

使用区域:全局事件,所有区域

语法

// 全局事件
chrome.storage.onChanged.addListener(listener)

参数说明

  • listener必填):有两个回调参数:
    • changes:变化的键值对集合,它有两个属性
      • 类型:Object
      • oldValue:修改前的值(删除时为undefined)
      • newValue:修改后的值(新增时为新值,删除时为undefined)
    • areaName:发生变化的存储区域
      • 类型:String
      • 值域:local / sync / session

注意:当前脚本通过set主动修改的数据不会触发该事件(避免循环触发),仅监听“外部修改”(插件其它组件、跨设备同步修改

例子

我们将创建监听,并在F12开发者工具的Application中修改数据,查看是否可以监听修改

// 创建一个监听
chrome.storage.onChanged.addListener((changes,areaName) => {
    console.log(`存储区域:${areaName}发生变化`)
    switch(areaName){
        case "local":
            console.log(`local发生变化:`,changes)
            break;
        case "session":
            console.log(`session发生变化:`,changes)
            break;
        case "sync":
            console.log(`sync发生变化:`,changes)
            break;
    }
})

// 手动给三个区域先设置一个值
chrome.storage.local.set({
    "key1": "value1",
    "key2": "value2"
})
chrome.storage.session.set({
    "key3": "value3",
    "key4": "value4"
})
chrome.storage.sync.set({
    "key5": "value5",
    "key6": "value6"
})

我们将local存储区域里的“key1”改为“key10”看一下效果:

可以看到一次修改实际上被onChanged事件监听了两次

此时,我们再将“key10”的值“value1”修改为“value11”:

这次居然只监听了一次,奇怪??

下面是我的理解:

  • 修改键时因为修改键,相当于两步:“删除键” -> “添加键”,因此会监听两次
  • 修改值时:只有一步“修改键值

其它

更多Chrome插件学习,可以参考我的专栏:

Chrome插件_是洋洋a的博客-CSDN博客

Logo

为武汉地区的开发者提供学习、交流和合作的平台。社区聚集了众多技术爱好者和专业人士,涵盖了多个领域,包括人工智能、大数据、云计算、区块链等。社区定期举办技术分享、培训和活动,为开发者提供更多的学习和交流机会。

更多推荐