前端开发肯定少不了和 cookie
打交道,此文较详细的介绍下 chrome.cookie
的 API
以及在 popup、service worker、content
中如何获取的
如果需使用 Cookie API
,需要在 manifest.json
文件中添加权限(Permissions
)和主机权限(host_permissions
)字段
"permissions": [
"cookies"
],
"host_permissions": [
"https://*.lkcoffee.com/*"
]
比如,我需要获取 domain
为 .lkcoffee.com
的 cookie
,就需要在 host_permissions
中进行 host
的配置
Types
)Cookie
表示关于
HTTP Cookie
的信息。
domain: string
cookie
的 domain
expirationDate: number
可选
Cookie
的有效期hostOnly: boolean
host-only
时为 true
httpOnly: boolean
httpOnly
时为 true
name: string
partitionKey: CookiePartitionKey
可选
Cookie
的分区键。path: string
sameSite: SameSiteStatus
secure: boolean
Secure
值session: booean
storeId: string
Cookie
的 Cookie
存储区的 ID
,如 getAllCookieStores()
中所提供。value: string
cookie
值CookieDetails
用于标识
Cookie
的详细信息。
name: string
Cookie
的名称。partitionKey: CookiePartitionKey
可选
Cookie
的分区键。storeId: string
可选
Cookie
的 Cookie
存储区的 ID
url: string
Cookie
相关联的网址。CookiePartitionKey
表示分区
Cookie
的分区键。
topLevelSite: string
可选
Cookie
的 top-level
CookieStore
表示浏览器中的
Cookie
存储
id: string
Cookie
存储区的唯一标识符。tabIds: number[]
Cookie
存储区的所有浏览器标签页的标识符。OnChangedCause
Cookie
发生更改的根本原因。
如果
Cookie
已插入或通过显式调用chrome.cookies.remove
被移除,为explicit
。如果Cookie
是因过期而自动移除的,为expired
。如果Cookie
因被已过期的失效日期覆盖而被移除,为expired_overwrite
。如果Cookie
因垃圾回收而自动移除,为evicted
。如果Cookie
因set
调用覆盖而自动移除,为overwrite
。
evicted
expired
explicit
expired_overwrite
overwrite
Cookie
的SameSite
状态。
no_restriction
为SameSite=None
,lax
为SameSite=Lax
,strict
为SameSite=Strict
,unspecified
为没有设置SameSite
属性的Cookie
。
no_restriction
:SameSite=None
lax
:SameSite=Lax
strict
:SameSite=Strict
unspecified
:没有设置 SameSite
Methods
)get()
检索单个
Cookie
的相关信息。如果指定网址存在多个同名的Cookie
,则返回路径最长的Cookie
。对于具有相同路径长度的Cookie
,系统将返回创建时间最早的Cookie
。
chrome.cookies.get(
details:
CookieDetails,
callback?:
function,
)
details: CookieDetails
callback: function
可选
(cookie?: Cookie)=>void
Promise<Cookie|undefined>
getAll()
从单个 Cookie 存储区中检索符合指定信息的所有 Cookie。返回的 Cookie 将进行排序,路径最长的 Cookie 排在最前面。如果多个 Cookie 具有相同的路径长度,创建时间最早的 Cookie 会排在最前面。此方法仅检索扩展程序拥有主机权限的网域的 Cookie。
chrome.cookies.getAll(
details:
object,
callback?:
function,
)
details: object
domain: string
可选name: string
可选partitionKey: CookiePartitionKey
可选
Cookie
的分区键。path: string
可选secure: boolean
可选session: boolean
可选storeId: string
可选url: string
可选callback: function
可选
(cookies:Cookie[])=>void
Promise<Cookie[]>
getAllCookieStores()
列出所有现有的
Cookie
存储。
chrome.cookies.getAllCookieStores(
callback?:
function,
)
callback: function
可选
(cookieStores: CookieStore[])=>void
Promise<CookieStore[]>
remove()
按名称删除 Cookie。
chrome.cookies.remove(
details:
CookieDetails,
callback?:
function,
)
details: CookieDetails
name: string
partitionKey: CookiePartitionKey
可选
Cookie
的分区键。storeId: string
url: string
callback: function
可选
(details?:object)=>void
Promise<object|undefined>
set()
使用指定的
Cookie
数据设置Cookie
;可能会覆盖等效的Cookie
(如果存在)。
chrome.cookies.set(
details:
object,
callback?:
function,
)
details: object
domain: string
可选
cookie
的 domain
expirationDate: number
可选
Cookie
的有效期httpOnly: boolean
可选
httpOnly
时为 true
name: string
可选
partitionKey: CookiePartitionKey
可选
Cookie
的分区键。path: string
可选
sameSite: SameSiteStatus
可选
secure: boolean
可选
Secure
值storeId: string
可选
Cookie
的 Cookie
存储区的 ID
,如 getAllCookieStores()
中所提供。url: string
value: string
可选
cookie
值callback: function
可选
(cookie?:Cookie)=>void
Promise<Cookie|undefined>
Action Popup
模块获取 Cookies
// 根据 domain 获取
const cookies = await chrome.cookies.getAll({ domain: '.lkcoffee.com'})
console.log('popup cookies--->', cookies)
// 根据 url 获取
const urlCookies = await chrome.cookies.getAll({ url: url })
console.log("popup urlCookies", urlCookies);
Background Service Worker
模块获取 Cookies
const cookies = await chrome.cookies.getAll({ domain: '.lkcoffee.com'})
console.log('service worker cookies--->', cookies)
Content Scripts
模块获取 Cookies
因为 Content Scripts
是注入当前页面的,所以和 web
一样获取即可
document.cookie