คำอธิบาย
ใช้ chrome.storage
API เพื่อจัดเก็บ เรียกข้อมูล และติดตามการเปลี่ยนแปลงข้อมูลผู้ใช้
สิทธิ์
storage
หากต้องการใช้ Storage API ให้ประกาศสิทธิ์ "storage"
ในไฟล์ Manifest ของส่วนขยาย เช่น
{
"name": "My extension",
...
"permissions": [
"storage"
],
...
}
แนวคิดและการใช้งาน
Storage API มีวิธีเฉพาะสำหรับส่วนขยายในการเก็บข้อมูลผู้ใช้และสถานะไว้ ซึ่งคล้ายกับ Storage API ของแพลตฟอร์มเว็บ (IndexedDB และ Storage) แต่ออกแบบมาเพื่อตอบสนองความต้องการพื้นที่เก็บข้อมูลของส่วนขยาย ฟีเจอร์หลักบางส่วนมีดังนี้
- บริบทส่วนขยายทั้งหมด รวมถึง Service Worker ของส่วนขยายและสคริปต์เนื้อหาจะมีสิทธิ์เข้าถึง Storage API
- ระบบจะจัดเก็บค่าที่ซีเรียลไลซ์ได้ของ JSON เป็นพร็อพเพอร์ตี้ออบเจ็กต์
- Storage API ทำงานแบบไม่พร้อมกันกับการดำเนินการอ่านและเขียนแบบเป็นกลุ่ม
- แม้ว่าผู้ใช้จะล้างแคชและประวัติการท่องเว็บแล้ว แต่ข้อมูลจะยังคงอยู่
- การตั้งค่าที่บันทึกไว้จะยังคงอยู่แม้ว่าจะใช้โหมดไม่ระบุตัวตนแบบแยกก็ตาม
- มีพื้นที่เก็บข้อมูลที่มีการจัดการแบบอ่านอย่างเดียวสำหรับนโยบายขององค์กรโดยเฉพาะ
ส่วนขยายใช้ Web Storage API ได้ไหม
แม้ว่าส่วนขยายจะใช้อินเทอร์เฟซ Storage
(เข้าถึงได้จาก window.localStorage
) ในบางบริบท (ป๊อปอัปและหน้า HTML อื่นๆ) ได้ แต่เราไม่แนะนําเนื่องจากเหตุผลต่อไปนี้
- Service Worker ของส่วนขยายใช้ Web Storage API ไม่ได้
- สคริปต์เนื้อหาจะแชร์พื้นที่เก็บข้อมูลกับหน้าโฮสต์
- ข้อมูลที่บันทึกโดยใช้ Web Storage API จะหายไปเมื่อผู้ใช้ล้างประวัติการท่องเว็บ
วิธีย้ายข้อมูลจาก Web Storage API ไปยัง Extension Storage API จาก Service Worker
- เตรียมหน้า HTML และไฟล์สคริปต์ของเอกสารนอกหน้าจอ ไฟล์สคริปต์ควรมีกิจวัตร Conversion และตัวแฮนเดิล
onMessage
- ในโปรแกรมทำงานของบริการส่วนขยาย ให้ตรวจสอบ
chrome.storage
สำหรับข้อมูลของคุณ - หากไม่พบข้อมูล ให้โทรหา
createDocument()
- หลังจาก Promise ที่แสดงผลได้รับการแก้ไขแล้ว ให้เรียกใช้
sendMessage()
เพื่อเริ่มกิจวัตร Conversion - เรียกใช้รูทีนการเปลี่ยนรูปแบบภายในตัวแฮนเดิล
onMessage
ของเอกสารที่อยู่นอกหน้าจอ
นอกจากนี้ ยังมีความแตกต่างเล็กน้อยเกี่ยวกับวิธีการทำงานของ Web Storage API ในส่วนขยาย ดูข้อมูลเพิ่มเติมได้ที่บทความพื้นที่เก็บข้อมูลและคุกกี้
พื้นที่เก็บข้อมูล
Storage API แบ่งออกเป็นพื้นที่เก็บข้อมูลต่อไปนี้
storage.local
- ระบบจะจัดเก็บข้อมูลไว้ในเครื่องและล้างข้อมูลออกเมื่อนําส่วนขยายออก ขีดจำกัดพื้นที่เก็บข้อมูลคือ 10 MB (5 MB ใน Chrome 113 และเวอร์ชันก่อนหน้า) แต่สามารถเพิ่มได้โดยขอสิทธิ์
"unlimitedStorage"
เราขอแนะนำให้ใช้storage.local
เพื่อจัดเก็บข้อมูลจำนวนมาก storage.managed
- พื้นที่เก็บข้อมูลที่มีการจัดการคือพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวสำหรับส่วนขยายที่ติดตั้งตามนโยบายและจัดการโดยผู้ดูแลระบบโดยใช้สคีมาและนโยบายขององค์กรที่นักพัฒนาแอปกำหนด นโยบายคล้ายกับตัวเลือก แต่ผู้ดูแลระบบเป็นผู้กำหนดค่าแทนผู้ใช้ ซึ่งช่วยให้กำหนดค่าส่วนขยายล่วงหน้าสำหรับผู้ใช้ทุกคนขององค์กรได้ ดูข้อมูลเกี่ยวกับนโยบายได้ที่เอกสารประกอบสำหรับผู้ดูแลระบบ ดูข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูล
managed
ได้ที่ไฟล์ Manifest สำหรับพื้นที่เก็บข้อมูล storage.session
- เก็บข้อมูลไว้ในหน่วยความจําตลอดระยะเวลาของเซสชันเบราว์เซอร์ โดยค่าเริ่มต้น จะไม่มีการแสดงสคริปต์เนื้อหา แต่คุณเปลี่ยนลักษณะการทํางานนี้ได้โดยการตั้งค่า
chrome.storage.session.setAccessLevel()
ขีดจำกัดพื้นที่เก็บข้อมูลคือ 10 MB (1 MB ใน Chrome 111 และเก่ากว่า) อินเทอร์เฟซstorage.session
เป็นหนึ่งในอินเทอร์เฟซหลายรายการที่เราแนะนำสำหรับ Service Worker storage.sync
- หากเปิดใช้การซิงค์ ระบบจะซิงค์ข้อมูลกับเบราว์เซอร์ Chrome ที่ผู้ใช้ลงชื่อเข้าใช้อยู่ หากปิดใช้ การตั้งค่านี้จะทำงานเหมือน
storage.local
Chrome จะจัดเก็บข้อมูลไว้ในเครื่องเมื่อเบราว์เซอร์ออฟไลน์ และจะซิงค์ต่อเมื่อกลับมาออนไลน์ ขีดจํากัดโควต้าคือประมาณ 100 KB หรือ 8 KB ต่อรายการ เราขอแนะนำให้ใช้storage.sync
เพื่อเก็บการตั้งค่าของผู้ใช้ไว้ในเบราว์เซอร์ที่ซิงค์ หากคุณกำลังทำงานกับข้อมูลที่ละเอียดอ่อนของผู้ใช้ ให้ใช้storage.session
แทน
ขีดจำกัดของพื้นที่เก็บข้อมูลและการจำกัด
Storage API มีข้อจำกัดในการใช้งานดังต่อไปนี้
- การจัดเก็บข้อมูลมักจะมีค่าใช้จ่ายด้านประสิทธิภาพ และ API จะมีโควต้าพื้นที่เก็บข้อมูล เราขอแนะนำให้ระมัดระวังเกี่ยวกับข้อมูลที่จัดเก็บเพื่อไม่ให้สูญเสียความสามารถในการจัดเก็บข้อมูล
- การจัดเก็บอาจใช้เวลาสักครู่ อย่าลืมจัดโครงสร้างโค้ดให้คำนึงถึงเวลาดังกล่าว
ดูรายละเอียดเกี่ยวกับขีดจำกัดของพื้นที่เก็บข้อมูลและสิ่งที่จะเกิดขึ้นเมื่อใช้พื้นที่เก็บข้อมูลเกินขีดจำกัดได้ที่ข้อมูลโควต้าสำหรับ sync
, local
และ session
กรณีการใช้งาน
ส่วนต่อไปนี้แสดง Use Case ทั่วไปสำหรับ Storage API
การตอบสนองแบบซิงค์กับการอัปเดตพื้นที่เก็บข้อมูล
หากต้องการติดตามการเปลี่ยนแปลงที่ทำกับพื้นที่เก็บข้อมูล ให้เพิ่ม Listener ลงในเหตุการณ์ onChanged
ของพื้นที่เก็บข้อมูล เมื่อใดก็ตามที่มีการเปลี่ยนแปลงในที่จัดเก็บ ระบบจะเรียกเหตุการณ์นั้น โค้ดตัวอย่างจะคอยฟังการเปลี่ยนแปลงต่อไปนี้
background.js:
chrome.storage.onChanged.addListener((changes, namespace) => {
for (let [key, { oldValue, newValue }] of Object.entries(changes)) {
console.log(
`Storage key "${key}" in namespace "${namespace}" changed.`,
`Old value was "${oldValue}", new value is "${newValue}".`
);
}
});
เราสามารถนำแนวคิดนี้ไปต่อยอดได้ ในตัวอย่างนี้ เรามีหน้าตัวเลือกที่อนุญาตให้ผู้ใช้เปิด/ปิด "โหมดแก้ไขข้อบกพร่อง" (ไม่ได้แสดงการใช้งานที่นี่) หน้าตัวเลือกจะบันทึกการตั้งค่าใหม่ลงใน storage.sync
ทันที และ Service Worker จะใช้ storage.onChanged
เพื่อใช้การตั้งค่าโดยเร็วที่สุด
options.html:
<!-- type="module" allows you to use top level await -->
<script defer src="options.js" type="module"></script>
<form id="optionsForm">
<label for="debug">
<input type="checkbox" name="debug" id="debug">
Enable debug mode
</label>
</form>
options.js:
// In-page cache of the user's options
const options = {};
const optionsForm = document.getElementById("optionsForm");
// Immediately persist options changes
optionsForm.debug.addEventListener("change", (event) => {
options.debug = event.target.checked;
chrome.storage.sync.set({ options });
});
// Initialize the form with the user's option settings
const data = await chrome.storage.sync.get("options");
Object.assign(options, data.options);
optionsForm.debug.checked = Boolean(options.debug);
background.js:
function setDebugMode() { /* ... */ }
// Watch for changes to the user's options & apply them
chrome.storage.onChanged.addListener((changes, area) => {
if (area === 'sync' && changes.options?.newValue) {
const debugMode = Boolean(changes.options.newValue.debug);
console.log('enable debug mode?', debugMode);
setDebugMode(debugMode);
}
});
การโหลดล่วงหน้าแบบไม่ซิงค์จากพื้นที่เก็บข้อมูล
เนื่องจาก Service Worker ไม่ได้ทํางานตลอดเวลา ในบางครั้งส่วนขยาย Manifest V3 จึงต้องโหลดข้อมูลจากพื้นที่เก็บข้อมูลแบบไม่สอดคล้องกันก่อนที่จะเรียกใช้ตัวแฮนเดิลเหตุการณ์ โดยข้อมูลโค้ดต่อไปนี้ใช้ตัวแฮนเดิลเหตุการณ์ action.onClicked
แบบแอสซิงค์ที่รอให้ระบบป้อนข้อมูล storageCache
แบบส่วนกลางก่อนที่จะดําเนินการตามตรรกะ
background.js:
// Where we will expose all the data we retrieve from storage.sync.
const storageCache = { count: 0 };
// Asynchronously retrieve data from storage.sync, then cache it.
const initStorageCache = chrome.storage.sync.get().then((items) => {
// Copy the data retrieved from storage into storageCache.
Object.assign(storageCache, items);
});
chrome.action.onClicked.addListener(async (tab) => {
try {
await initStorageCache;
} catch (e) {
// Handle error that occurred during storage initialization.
}
// Normal action handler logic.
storageCache.count++;
storageCache.lastTabId = tab.id;
chrome.storage.sync.set(storageCache);
});
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงพื้นที่เก็บข้อมูล local
, sync
และ
session
ในพื้นที่
chrome.storage.local.set({ key: value }).then(() => {
console.log("Value is set");
});
chrome.storage.local.get(["key"]).then((result) => {
console.log("Value is " + result.key);
});
ซิงค์
chrome.storage.sync.set({ key: value }).then(() => {
console.log("Value is set");
});
chrome.storage.sync.get(["key"]).then((result) => {
console.log("Value is " + result.key);
});
เซสชัน
chrome.storage.session.set({ key: value }).then(() => {
console.log("Value was set");
});
chrome.storage.session.get(["key"]).then((result) => {
console.log("Value is " + result.key);
});
หากต้องการดูการสาธิตอื่นๆ ของ Storage API ให้ดูตัวอย่างต่อไปนี้
ประเภท
AccessLevel
ระดับการเข้าถึงของพื้นที่เก็บข้อมูล
ค่าแจกแจง
"TRUSTED_CONTEXTS"
ระบุบริบทที่มาจากส่วนขยายเอง
"TRUSTED_AND_UNTRUSTED_CONTEXTS"
ระบุบริบทที่มาจากภายนอกส่วนขยาย
StorageArea
พร็อพเพอร์ตี้
-
onChanged
Event<functionvoidvoid>
Chrome 73 ขึ้นไปเรียกใช้เมื่อมีการเปลี่ยนแปลงรายการอย่างน้อย 1 รายการ
ฟังก์ชัน
onChanged.addListener
มีรูปแบบดังนี้(callback: function) => {...}
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
จะมีลักษณะดังนี้(changes: object) => void
-
การเปลี่ยนแปลง
ออบเจ็กต์
-
-
-
ล้าง
โมฆะ
สัญญานำรายการทั้งหมดออกจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
clear
มีรูปแบบดังนี้(callback?: function) => {...}
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome 88 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
รับ
โมฆะ
สัญญารับรายการอย่างน้อย 1 รายการจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
get
มีรูปแบบดังนี้(keys?: string | string[] | object, callback?: function) => {...}
-
กุญแจ
string | string[] | object ไม่บังคับ
คีย์เดียวที่จะรับ รายการคีย์ที่จะรับ หรือพจนานุกรมที่ระบุค่าเริ่มต้น (ดูคำอธิบายของออบเจ็กต์) รายการหรือออบเจ็กต์ว่างเปล่าจะแสดงผลออบเจ็กต์ผลลัพธ์ว่างเปล่า ส่ง
null
เพื่อรับเนื้อหาทั้งหมดของพื้นที่เก็บข้อมูล -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(items: object) => void
-
รายการ
ออบเจ็กต์
ออบเจ็กต์ที่มีรายการในการแมปคีย์-ค่า
-
-
returns
Promise<object>
Chrome 88 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
getBytesInUse
โมฆะ
สัญญารับปริมาณพื้นที่ (เป็นไบต์) ที่รายการอย่างน้อย 1 รายการใช้อยู่
ฟังก์ชัน
getBytesInUse
มีรูปแบบดังนี้(keys?: string | string[], callback?: function) => {...}
-
กุญแจ
string | string[] ไม่บังคับ
คีย์เดียวหรือรายการคีย์เพื่อดูการใช้งานทั้งหมด รายการว่างจะแสดงผลเป็น 0 ส่ง
null
เพื่อดูการใช้งานพื้นที่เก็บข้อมูลทั้งหมด -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(bytesInUse: number) => void
-
bytesInUse
ตัวเลข
จำนวนพื้นที่เก็บข้อมูลที่ใช้อยู่เป็นไบต์
-
-
returns
Promise<number>
Chrome 88 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
getKeys
โมฆะ
สัญญา Chrome 130 ขึ้นไปรับคีย์ทั้งหมดจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
getKeys
มีรูปแบบดังนี้(callback?: function) => {...}
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้(keys: string[]) => void
-
กุญแจ
string[]
อาร์เรย์ที่มีคีย์ที่อ่านจากพื้นที่เก็บข้อมูล
-
-
returns
Promise<string[]>
ไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
นำข้อมูลออก
โมฆะ
สัญญานำรายการอย่างน้อย 1 รายการออกจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
remove
มีรูปแบบดังนี้(keys: string | string[], callback?: function) => {...}
-
กุญแจ
string | string[]
คีย์เดียวหรือรายการคีย์ของรายการที่จะนำออก
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome 88 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
ตั้งค่า
โมฆะ
สัญญาตั้งค่าหลายรายการ
ฟังก์ชัน
set
มีรูปแบบดังนี้(items: object, callback?: function) => {...}
-
รายการ
ออบเจ็กต์
ออบเจ็กต์ที่ให้คู่คีย์/ค่าแต่ละคู่เพื่ออัปเดตพื้นที่เก็บข้อมูล คู่คีย์/ค่าอื่นๆ ในพื้นที่เก็บข้อมูลจะไม่ได้รับผลกระทบ
ค่าพื้นฐาน เช่น ตัวเลข จะจัดรูปแบบตามที่ต้องการ โดยปกติแล้ว ค่าที่มี
typeof
"object"
และ"function"
จะเปลี่ยนรูปแบบเป็น{}
ยกเว้นArray
(เปลี่ยนรูปแบบตามที่คาดไว้)Date
และRegex
(เปลี่ยนรูปแบบโดยใช้การนําเสนอString
) -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome 88 ขึ้นไปไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
-
setAccessLevel
โมฆะ
สัญญา Chrome 102 ขึ้นไปกำหนดระดับการเข้าถึงที่ต้องการสำหรับพื้นที่เก็บข้อมูล ค่าเริ่มต้นจะเป็นบริบทที่เชื่อถือได้เท่านั้น
ฟังก์ชัน
setAccessLevel
มีรูปแบบดังนี้(accessOptions: object, callback?: function) => {...}
-
accessOptions
ออบเจ็กต์
-
accessLevel
ระดับการเข้าถึงของพื้นที่เก็บข้อมูล
-
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
จะมีลักษณะดังนี้() => void
-
returns
Promise<void>
ไฟล์ Manifest เวอร์ชัน 3 ขึ้นไปรองรับ Promise แต่มี Callback ไว้เพื่อให้ใช้กับเวอร์ชันก่อนหน้าได้ คุณใช้ทั้ง 2 รูปแบบในการเรียกใช้ฟังก์ชันเดียวกันไม่ได้ พรอมต์จะได้รับการแก้ไขด้วยประเภทเดียวกันกับที่ส่งไปยังการเรียกกลับ
-
StorageChange
พร็อพเพอร์ตี้
-
newValue
ใดก็ได้ ไม่บังคับ
ค่าใหม่ของรายการ หากมี
-
oldValue
ใดก็ได้ ไม่บังคับ
ค่าเดิมของรายการ หากมี
พร็อพเพอร์ตี้
local
รายการในพื้นที่เก็บข้อมูล local
จะอยู่ในเครื่องแต่ละเครื่อง
ประเภท
StorageArea และออบเจ็กต์
พร็อพเพอร์ตี้
-
QUOTA_BYTES
10485760
จำนวนข้อมูลสูงสุด (เป็นไบต์) ที่เก็บไว้ในพื้นที่เก็บข้อมูลในเครื่องได้ ซึ่งวัดจากการเปลี่ยนค่าทุกค่าเป็นสตริง JSON บวกความยาวของคีย์ทุกรายการ ระบบจะละเว้นค่านี้หากส่วนขยายมีสิทธิ์
unlimitedStorage
การอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่าruntime.lastError
เมื่อใช้การเรียกกลับ หรือ Promise ที่ปฏิเสธหากใช้ async/await
managed
รายการในพื้นที่เก็บข้อมูล managed
กำหนดโดยนโยบายขององค์กรที่ผู้ดูแลระบบโดเมนกำหนดค่าไว้ และเป็นแบบอ่านอย่างเดียวสำหรับส่วนขยาย การพยายามแก้ไขเนมสเปซนี้จะทำให้เกิดข้อผิดพลาด ดูข้อมูลเกี่ยวกับการกำหนดค่านโยบายได้ที่ไฟล์ Manifest สำหรับพื้นที่เก็บข้อมูล
ประเภท
session
รายการในพื้นที่เก็บข้อมูล session
จะจัดเก็บไว้ในหน่วยความจำและจะไม่เก็บถาวรไว้ในดิสก์
ประเภท
StorageArea และออบเจ็กต์
พร็อพเพอร์ตี้
-
QUOTA_BYTES
10485760
จํานวนข้อมูลสูงสุด (เป็นไบต์) ที่เก็บไว้ในหน่วยความจําได้ ซึ่งวัดจากการประมาณการใช้หน่วยความจําที่กําหนดแบบไดนามิกของค่าและคีย์ทุกรายการ การอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ
sync
ระบบจะซิงค์รายการในพื้นที่เก็บข้อมูล sync
โดยใช้การซิงค์ของ Chrome
ประเภท
StorageArea และออบเจ็กต์
พร็อพเพอร์ตี้
-
MAX_ITEMS
512
จำนวนรายการสูงสุดที่สามารถจัดเก็บในพื้นที่เก็บข้อมูลการซิงค์ การอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ -
MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE
1000000
เลิกใช้งานstorage.sync API ไม่มีโควต้าการดำเนินการเขียนแบบต่อเนื่องอีกต่อไป
-
MAX_WRITE_OPERATIONS_PER_HOUR
1800
จํานวนการดําเนินการ
set
,remove
หรือclear
สูงสุดที่ทําได้ในแต่ละชั่วโมง ซึ่งก็คือ 1 รายการทุก 2 วินาที ซึ่งเป็นขีดจำกัดที่ต่ำกว่าขีดจำกัดการเขียนต่อนาทีที่สูงขึ้นในระยะสั้นการอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ -
MAX_WRITE_OPERATIONS_PER_MINUTE
120
จำนวนการดำเนินการ
set
,remove
หรือclear
สูงสุดที่ทำได้ในแต่ละนาที ซึ่งเท่ากับ 2 รายการต่อวินาที จึงให้อัตราข้อมูลที่สูงกว่าการเขียนต่อชั่วโมงในระยะเวลาที่สั้นลงการอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ -
QUOTA_BYTES
102400
จำนวนข้อมูลทั้งหมดสูงสุด (เป็นไบต์) ที่เก็บไว้ในพื้นที่เก็บข้อมูลการซิงค์ได้ ซึ่งวัดจากการแปลงค่าทั้งหมดเป็นสตริง JSON บวกกับความยาวของคีย์แต่ละรายการ การอัปเดตที่จะทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ -
QUOTA_BYTES_PER_ITEM
8192
ขนาดสูงสุด (เป็นไบต์) ของรายการแต่ละรายการในพื้นที่เก็บข้อมูลการซิงค์ ซึ่งวัดจากการเปลี่ยนค่าเป็นสตริง JSON บวกความยาวของคีย์ การอัปเดตที่มีรายการใหญ่กว่าขีดจำกัดนี้จะดำเนินการไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อ Promise ถูกปฏิเสธ
กิจกรรม
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
เรียกใช้เมื่อมีการเปลี่ยนแปลงรายการอย่างน้อย 1 รายการ
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
จะมีลักษณะดังนี้(changes: object, areaName: string) => void
-
การเปลี่ยนแปลง
ออบเจ็กต์
-
areaName
สตริง
-