Mô tả
Sử dụng API chrome.storage
để lưu trữ, truy xuất và theo dõi các thay đổi đối với dữ liệu người dùng.
Quyền
storage
Tổng quan
Storage API cung cấp một cách thức dành riêng cho tiện ích để duy trì dữ liệu và trạng thái người dùng. API này tương tự như các API lưu trữ của nền tảng web (IndexedDB và Storage), nhưng được thiết kế để đáp ứng nhu cầu lưu trữ của các tiện ích. Sau đây là một số tính năng chính:
- Tất cả các ngữ cảnh tiện ích, bao gồm cả trình thực thi dịch vụ tiện ích và tập lệnh nội dung đều có quyền truy cập vào Storage API.
- Các giá trị có thể chuyển đổi tuần tự JSON được lưu trữ dưới dạng thuộc tính đối tượng.
- Storage API là không đồng bộ với các thao tác đọc và ghi hàng loạt.
- Ngay cả khi người dùng xoá bộ nhớ đệm và nhật ký duyệt web, dữ liệu vẫn được lưu giữ.
- Các chế độ cài đặt đã lưu vẫn được giữ nguyên ngay cả khi bạn dùng chế độ ẩn danh chia đôi.
- Bao gồm một vùng lưu trữ được quản lý chỉ đọc dành riêng cho các chính sách của doanh nghiệp.
Mặc dù các tiện ích có thể sử dụng giao diện [Storage
][mdn-storage] (có thể truy cập từ window.localStorage
) trong một số ngữ cảnh (cửa sổ bật lên và các trang HTML khác), nhưng bạn không nên sử dụng giao diện này vì những lý do sau:
- Service worker của tiện ích không thể truy cập vào
Storage
. - Tập lệnh nội dung chia sẻ bộ nhớ với trang lưu trữ.
- Dữ liệu được lưu bằng giao diện
Storage
sẽ bị mất khi người dùng xoá nhật ký duyệt web.
Cách di chuyển dữ liệu từ API bộ nhớ web sang API bộ nhớ tiện ích từ một worker dịch vụ:
- Tạo một tài liệu ngoài màn hình bằng một quy trình chuyển đổi và trình xử lý [
onMessage
][on-message]. - Thêm một quy trình chuyển đổi vào tài liệu bên ngoài màn hình.
- Trong trình chạy dịch vụ của tiện ích, hãy kiểm tra
chrome.storage
để biết dữ liệu của bạn. - Nếu không tìm thấy dữ liệu của bạn, hãy [tạo][create-offscreen] một tài liệu ngoài màn hình và gọi [
sendMessage()
][send-message] để bắt đầu quy trình chuyển đổi. - Trong trình xử lý
onMessage
của tài liệu ngoài màn hình, hãy gọi quy trình chuyển đổi.
Ngoài ra, có một số điểm khác biệt về cách hoạt động của các API bộ nhớ trên web trong tiện ích. Tìm hiểu thêm trong bài viết [Bộ nhớ và cookie][storage-and-cookies].
Khu vực lưu trữ
Storage API được chia thành 4 nhóm ("vùng lưu trữ") sau đây:
storage.local
- Dữ liệu được lưu trữ cục bộ và sẽ bị xoá khi bạn xoá tiện ích. Hạn mức là khoảng 10 MB, nhưng bạn có thể tăng hạn mức này bằng cách yêu cầu quyền
"unlimitedStorage"
. Hãy cân nhắc sử dụng bộ nhớ này để lưu trữ lượng dữ liệu lớn hơn.
storage.sync
- Nếu tính năng đồng bộ hoá được bật, dữ liệu sẽ được đồng bộ hoá với mọi trình duyệt Chrome mà người dùng đã đăng nhập. Nếu bị vô hiệu hoá, nó sẽ hoạt động như
storage.local
. Chrome lưu trữ dữ liệu cục bộ khi trình duyệt không có kết nối mạng và tiếp tục đồng bộ hoá khi có kết nối mạng trở lại. Hạn mức là khoảng 100 KB, 8 KB cho mỗi mục. Hãy cân nhắc sử dụng tính năng này để duy trì chế độ cài đặt của người dùng trên các trình duyệt được đồng bộ hoá.
- storage.session
- Lưu trữ dữ liệu trong bộ nhớ trong suốt phiên hoạt động của trình duyệt. Theo mặc định, API này không được hiển thị cho tập lệnh nội dung, nhưng bạn có thể thay đổi hành vi này bằng cách đặt
chrome.storage.session.setAccessLevel()
. Hạn mức này là khoảng 10 MB. Hãy cân nhắc sử dụng tính năng này để lưu trữ các biến chung trong các lần chạy trình thực thi dịch vụ.
- storage.managed
- Quản trị viên có thể sử dụng lược đồ và các chính sách doanh nghiệp để định cấu hình chế độ cài đặt của một tiện ích hỗ trợ trong môi trường được quản lý. Vùng lưu trữ này ở chế độ chỉ đọc.
Tệp kê khai
Để sử dụng Storage API, hãy khai báo quyền "storage"
trong tệp kê khai của tiện ích. Ví dụ:
{
"name": "My extension",
...
"permissions": [
"storage"
],
...
}
Cách sử dụng
Các mẫu sau đây minh hoạ các vùng lưu trữ local
, sync
và session
:
storage.local
chrome.storage.local.set({ key: value }).then(() => {
console.log("Value is set");
});
chrome.storage.local.get(["key"]).then((result) => {
console.log("Value currently is " + result.key);
});
storage.sync
chrome.storage.sync.set({ key: value }).then(() => {
console.log("Value is set");
});
chrome.storage.sync.get(["key"]).then((result) => {
console.log("Value currently is " + result.key);
});
storage.session
chrome.storage.session.set({ key: value }).then(() => {
console.log("Value was set");
});
chrome.storage.session.get(["key"]).then((result) => {
console.log("Value currently is " + result.key);
});
Để tìm hiểu thêm về vùng lưu trữ managed
, hãy xem bài viết Tệp kê khai cho các vùng lưu trữ.
Hạn mức bộ nhớ và hạn mức điều tiết
Đừng nghĩ việc thêm vào Storage API giống như việc đặt mọi thứ vào một chiếc xe tải lớn. Hãy coi việc thêm vào bộ nhớ giống như việc đặt một thứ gì đó vào đường ống. Đường ống có thể đã có vật liệu bên trong và thậm chí có thể đã đầy. Luôn giả định có độ trễ giữa thời điểm bạn thêm vào bộ nhớ và thời điểm dữ liệu thực sự được ghi lại.
Để biết thông tin chi tiết về các hạn chế đối với dung lượng lưu trữ và những việc sẽ xảy ra khi bạn vượt quá hạn mức, hãy xem thông tin về hạn mức của sync
,