用 JS 操作 Cookie 其實是很麻煩的,而且不存在一個簡單的 API 能讓我們取得或設定 Cookie。
唯一一個操作 Cookie 的 API 是 document.cookie
,但這句程式碼使用起來很難受。如果說我們想要取得一個需要的Cookie,可能得先寫這麼一個utils 函數:
function getCookie(name) { const value = `; ${document.cookie}`; const parts = value.split(`; ${name}=`); if (parts.length === 2) return parts.pop().split(';').shift(); }复制代码
但是在Chrome 87 版本中我們無需再引入這樣的程式碼了,取而代之的是新的API:cookieStore
。這是一個非同步的 API,可以很方便地取得設定以及監聽 Cookie 的改變。
如果你想下載 beta 版本的 Chrome,可以在 此連結 中取得。
以下是新內容的介紹。
剛才在上文中我們已經了解到在之前取得一個需要的 Cookie 是有多麻煩,如今我們只需一句話就可以獲得想要的內容了。
cookieStore.get
有兩個函數簽名,前者我們可以透過傳入cookie 的屬性去匹配想要的內容,後者則是直接傳入name
取得。 API 很符合直覺,比之前的方式不知道好到哪裡去了。
當然除了取得單一 cookie 之外,新的 API 還提供了取得多個 cookie 的方式。比如說現在我想取得所有屬於某個domain 的cookies,就可以使用如下方式:
document.cookie
const setCookie = (name, value, days = 7, path = '/') => { const expires = new Date(Date.now() + days * 864e5).toUTCString() document.cookie = name + '=' + encodeURIComponent(value) + '; expires=' + expires + '; path=' + path }复制代码現在我們可以透過
cookieStore.set 來很方便的設定Cookie 了:
set 函數支援兩個簽名,前者可以設定所有Cookie 上的內容,後者就是
key-value 的形式。
var delete_cookie = function(name) { document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:01 GMT;'; };复制代码看起來很奇怪,想刪除一個 Cookie 不是把欄位刪了,而是把它過期。現在我們有了新的API 就不需這樣做了: 同樣的,
delete API 也有兩個函數簽名,單純字串的時候等同於需要刪除Cookie 的
name,傳個物件時簽章略有些與之前不同,需要注意簽章中可選屬性都是有預設值的:
dictionary CookieStoreDeleteOptions { required USVString name; USVString? domain = null; USVString path = "/"; };复制代码監聽Cookie 的改變這個功能應該是之前沒有的,如今可以透過新的API 監聽Cookie 的改變及刪除。 當我們設定或刪除 Cookie 時對應的事件就會拋出我們所改變的內容。 最後以上就是本文的內容,連結是
cookieStore 的文檔,有興趣的讀者可以了解下。
######相關免費學習推薦:javascript#(影片)
以上是Cookie 居然可以這樣完成了的詳細內容。更多資訊請關注PHP中文網其他相關文章!