Google Chrome浏览器扩展可以使用如下任何一种存储机制:

  • HTML5的localStorage API实现的本地存储(此处略)
  • Google的chrome.storage.* API实现的浏览器存储
  • Google的chrome.cookies.* API实现的cookie存储

1) chrome.storage API实现的浏览器存储

Chrome浏览器扩展通过chrome.storage.* API,可以存取数据或监听数据的变化。

在manifest.json文件中注册storage如下:

      {
        "permissions": [
          "storage"
        ],
      }

chrome.storage.* API提供了chrome.storage.sync, chrome.storage.local和chrome.storage.managed三种存储空间类型。chrome.storage.local方式只能够将数据存储在当前登录的设备本地。

chrome.storage.sync方式实现了自动数据同步,相同的用户无论使用什么物理设备,只要以相同的账户登录即可访问存储的数据。设备离线时数据存储在本地,一旦设备上线则同步数据。如果用户禁止了数据同步,则采用chrome.storage.local方式。

chrome.storage.managed方式是只读存储,只有域管理员能够在其中存储数据,Chrome浏览器扩展只能读取其中的数据。

chrome.storage机制采用一系列的存储格子(tubes)存储数据,存储空间有限。存储数据时只能一个一进行写入操作,并发性能不高。

下面以chrome.storage.sync为例介绍具体方法的使用:

  • 存储一个或多个数据

chrome.storage.sync.set(object items, function() {...})

其中的items对象包含若干“键值对”的映射,一个键值对就是一个存储的数据项。

  • 获取指定key的数据项

chrome.storage.sync.get(string or array of string or object keys, function(object items) {...})

其中的keys如果为null则返回全部存储的数据项,如果为””或[]将返回空对象{}。

回调函数中的items对象就是获取的数据项,其中包含“键值对”的映射。

  • 删除指定key的一个或多个数据项

chrome.storage.sync.remove(string or array of string keys, function() {...})

  • 清空存储的所有数据项

chrome.storage.sync.clear(function(){…})

  • 获取当前已经被使用的存储空间的数量(以字节为单位)

chrome.storage.sync.getBytesInUse(string or array of string keys, function(integer bytesInUse) {...})

其中的keys属性是数据项的key,如果为null表示取全部数据项的使用空间,””或[]将返回0

此外,对于某些敏感数据的变化,可以通过onChanged事件进行监听。存储格子中的任何变化都将触发该事件,示例如下:

chrome.storage.onChanged.addListener(function(changes, namespace) {

for (key in changes) {

var storageChange = changes[key];

console.log('Storage key "%s" in namespace "%s" changed. ' +

'Old value was "%s", new value is "%s".',

key, //数据的索引key

namespace, //数据的存储空间类型,枚举值"sync", "local", "managed"

storageChange.oldValue,//变化前的值

storageChange.newValue); //变化后的值

}

});

回调函数中的changes对象包含了所有发生变化了的数据的key(string类型)和变化前后的值(StoreageChange类型),数据结构如下:

changes:{

key1: obj

key2: obj2

keyn: objn

}

2) chrome.cookies.* API实现的cookie存储

Chrome浏览器扩展通过chrome.cookies.* API,可以获取或修改cookie,还可以监控cookie的变化。

在manifest.json文件中声明cookie权限以及要访问的域如下:

{

"permissions": [

"cookies",

"*://*.google.com"

],

}

chrome.cookies.Cookie对象的属性如下:

属性名

类型

必选/可选

注释

name

string

必选

Cookie对象的名字

value

string

必选

Cookie对象的值

domain

string

必选

Cookie对象适用的域

path

string

必选

Cookie对象适用的URL路径

hostOnly

boolean

必选

Cookie对象是否只响应指定主机的请求,访问Cookie对象的请求的主机必须在指定范围内

secure

boolean

必选

Cookie对象是否被标记为Secure,这样就只能通过安全通道(如HTTPS)访问Cookie对象

httpOnly

boolean

必选

Cookie对象是否被标记为HttpOnly,这样客户端脚本就无法访问Cookie对象

session

boolean

必选

是否为Session级别的Cookie对象

expirationDate

double

可选

Cookie对象的过期时间,单位s

Session级别的Cookie对象没有该属性,因为会话结束即过期

storeId

string

必选

包含该Cookie对象的CookieStore的ID

其中,chrome.cookies.CookieStore对象表示浏览器中的cookie仓库,常见的有正常模式的CookieStore和隐身模式的CookieStore。

chrome.cookies API中的常用方法:

  • 获得一个Cookie对象,如果有多个符合过滤条件则返回拥有最长path的Cookie对象

chrome.cookies.get(object details, function(Cookie cookie) {...})

details对象的属性如下:

属性名

类型

必选/可选

注释

url

string

必选

访问Cookie对象的请求的URL

name

string

必选

Cookie对象的名字

storeId

string

可选

包含该Cookie对象的CookieStore的ID,默认为当前执行的上下文的CookieStore

  • 获取一个CookieStore中的所有的Cookie对象

chrome.cookies.getAll(object details, function(array of Cookie cookies) {...})

details对象的属性如下:

属性名

类型

必选/可选

注释

url

string

可选

访问Cookie对象的请求的URI,影响domain和path

name

string

可选

Cookie对象的名字

value

string

可选

Cookie对象的值

domain

string

可选

Cookie对象适用的域

path

string

可选

Cookie对象适用的URL路径

secure

boolean

可选

Cookie对象是否被标记为Secure,这样就只能通过安全通道(如HTTPS)访问Cookie对象

session

boolean

可选

是否为Session级别的Cookie对象

storeId

string

可选

包含该Cookie对象的CookieStore的ID

  • 设置Cookie对象

chrome.cookies.set(object details, function(Cookie cookie) {...})

details对象的属性如下:

属性名

类型

必选/可选

注释

url

string

必选

访问Cookie对象的请求的URI,影响domain和path

name

string

可选

Cookie对象的名字

value

string

可选

Cookie对象的值

domain

string

可选

Cookie对象适用的域

path

string

可选

Cookie对象适用的URL路径

secure

boolean

可选

Cookie对象是否被标记为Secure,这样就只能通过安全通道(如HTTPS)访问Cookie对象

httpOnly

boolean

可选

Cookie对象是否被标记为HttpOnly,这样客户端脚本就无法访问Cookie对象

expirationDate

double

可选

Cookie对象的过期时间,单位s

Session级别的Cookie对象没有该属性,因为会话结束即过期

storeId

string

可选

包含该Cookie对象的CookieStore的ID

  • 根据名字删除Cookie对象

chrome.cookies.remove(object details, function(object details) {...})

details对象的属性如下:

属性名

类型

注释

url

string

要删除的Cookie对象所关联的URL

name

string

要删除的Cookie对象的名字

storeId

string

要删除的Cookie对象的CookieStore的ID

  • 获取所有的cookie仓库对象

chrome.cookies.getAllCookieStores(function(array of CookieStore cookieStores) {...})

  • 监听Cookie对象的变化

chrome.cookies.onChanged.addListener(function(object changeInfo) {...})

如果Cookie对象的值被修改或删除,则发出该事件。changeInfo对象的属性如下:

属性名

类型

注释

removed

boolean

Cookie对象是否被删除

cookie

chrome.cookies.Cookie

发生变化的Cookie对象

cause

chrome.cookies.OnChangedCause

导致Cookie对象变化的原因

Chrome浏览器扩展开发系列之八:Chrome扩展的数据存储的更多相关文章

  1. Chrome浏览器扩展开发系列之十四

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 时间:2015-10-08 16:17:59      阅读:1361      评论:0      收藏:0    ...

  2. Chrome浏览器扩展开发系列之十四:本地消息机制Native messagin

    Chrome浏览器扩展开发系列之十四:本地消息机制Native messaging 2016-11-24 09:36 114人阅读 评论(0) 收藏 举报  分类: PPAPI(27)  通过将浏览器 ...

  3. Chrome浏览器扩展开发系列之十六:扩展中可用的Chrome浏览器API

    除了Chrome浏览器支持的chrome.* API之外,Chrome浏览器扩展还可以使用Chrome浏览器为Web页面或Chrome app提供的APIs.对于Chrome浏览器2支持的API,还可 ...

  4. Chrome浏览器扩展开发系列之一:初识Google Chrome扩展

    1.       Google Chrome扩展简介 Google Chrome扩展是一种软件,以增强Chrome浏览器的功能. Google Chrome扩展使用HTML.JavaScript.CS ...

  5. Chrome扩展开发之二——Chrome扩展中脚本的运行机制和通信方式

    目录: 0.Chrome扩展开发(Gmail附件管理助手)系列之〇——概述 1.Chrome扩展开发之一——Chrome扩展的文件结构 2.Chrome扩展开发之二——Chrome扩展中脚本的运行机制 ...

  6. EXT.NET高效开发(三)——使用Chrome浏览器的开发人员工具

    这篇帖子老少皆宜,不分男女,不分种族,不分职业.俗话说:“磨刀不误砍柴工”.掌握一些开发工具的使用,对自己帮助是很大的(无论是用于分析问题,还是提高生产力).本篇就讲述如何利用Chrome浏览器(这里 ...

  7. Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用

    Spring Boot干货系列:(八)数据存储篇-SQL关系型数据库之JdbcTemplate的使用 原创 2017-04-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章介绍了一些基础,但都是静 ...

  8. Node.js 从零开发 web server博客项目[数据存储]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  9. Chrome浏览器扩展开发系列之十九:扩展开发示例

    翻译总结了这么多的官网内容,下面以一款博主开发的“沪深股票价格变化实时追踪提醒”软件为例,介绍Chrome浏览器扩展程序的开发,开发环境为Eclipse IDE+Chrome Browser. “沪深 ...

随机推荐

  1. 第 15 章 可扩展性设计之 Cache 与 Search 的利用

    前言: 前面章节部分所分析的可扩展架构方案,基本上都是围绕在数据库自身来进行的,这样是否会使我们在寻求扩展性之路的思维受到“禁锢”,无法更为宽广的发散开来.这一章,我们就将跳出完全依靠数据库自身来改善 ...

  2. gradle windows 环境变量

    我的电脑 ->  高级环境变量 GRADLE_HOME    D:\soft\gradle-3.5 path %GRADLE_HOME%\bin

  3. 什么样的PPT能助你成为一个优秀的演讲者——程序员的演讲之道

    欢迎访问我的个人博客,原文链接:http://wensibo.top/2017/05/28/speaker/ ,未经允许不得转载! 前言 今天是端午节假期的第一天,在这里祝大家假期快乐,不过像我这种渣 ...

  4. javascript基础-正则表达式

    概述 正则表达式被用来检索.替换那些符合某个模式的文本 标准正则表达式语法 javascript对正则表达式的支持 替代写法 逆向环视 //需求:替换mpre.cnsuning.com为${pre}, ...

  5. D. Powerful array

    D. Powerful array 题意 给定一个数列:a[i] (1<= i <= n) K[j]表示 在区间 [l,r]中j出现的次数.有t个查询,每个查询l,r,对区间内所有a[i] ...

  6. 搭建免费wifi,嗅探接入该wifi的所有网络信息

    环境: 1: create_ap , 搭建免费wifi. 2: wireshark , 嗅探网络信息. 搭建热点 搭建热点: git clone https://github.com/oblique/ ...

  7. 仿flash轮播

    <!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...

  8. 微信小程序开发 -- 02

    微信小程序开发 --02 微信小程序在开发中,难度系数不是很大,其中应用的技术也是web开发中常用的技术,虽然在微信开发者工具中的叫法与常见的web开发的叫法不太一样. 首先,在微信小程序开发中,代码 ...

  9. 《Python编程从入门到实践》第三章_列表简介

    什么是列表呢? 官方说明就是由一些列按特点顺序排列的元素组成.其实可以看出很多个字符串的有序组合吧,里面的内容可以随时的删除,增加,修改. 下面这个就是一个列表,python打印列表的时候会将中括号和 ...

  10. java书系列之——前言

    第1章Java的起源 对于计算机语言的发展史,业界一般认为:B语言导致了C语言的诞生,C语言演变出了C++语言,而C++语言将让位于Java语言.要想更好地了解Java语言,就必须了解它产生的原因.推 ...