คำอธิบาย
ใช้ chrome.storage
API เพื่อจัดเก็บ เรียกข้อมูล และติดตามการเปลี่ยนแปลงของข้อมูลผู้ใช้
สิทธิ์
storage
หากต้องการใช้ API พื้นที่เก็บข้อมูล ให้ประกาศสิทธิ์ "storage"
ในไฟล์ Manifest ของส่วนขยาย เช่น
{
"name": "My extension",
...
"permissions": [
"storage"
],
...
}
แนวคิดและการใช้งาน
Storage API เป็นวิธีเฉพาะสำหรับส่วนขยายในการคงข้อมูลและสถานะของผู้ใช้ไว้ ซึ่งคล้ายกับ API พื้นที่เก็บข้อมูลของแพลตฟอร์มเว็บ (IndexedDB และพื้นที่เก็บข้อมูล) แต่ได้รับการออกแบบมาเพื่อตอบสนองความต้องการด้านพื้นที่เก็บข้อมูลของส่วนขยาย ฟีเจอร์สำคัญบางส่วนมีดังนี้
- บริบทของส่วนขยายทั้งหมด รวมถึงโปรแกรมทำงานของบริการส่วนขยายและสคริปต์เนื้อหามีสิทธิ์เข้าถึง Storage API
- ค่าที่ทำให้เป็นอนุกรมของ JSON จะจัดเก็บเป็นพร็อพเพอร์ตี้ออบเจ็กต์
- Storage API ทำงานไม่พร้อมกันกับการดำเนินการอ่านและเขียนจำนวนมาก
- แม้ว่าผู้ใช้จะล้างแคชและประวัติการท่องเว็บ แต่ข้อมูลจะยังคงอยู่
- การตั้งค่าที่จัดเก็บไว้จะยังคงอยู่แม้ว่าจะใช้แยกส่วนแบบไม่ระบุตัวตนก็ตาม
- รวมพื้นที่เก็บข้อมูลที่มีการจัดการแบบอ่านอย่างเดียวโดยเฉพาะสำหรับนโยบายองค์กร
ส่วนขยายจะใช้ API พื้นที่เก็บข้อมูลบนเว็บได้ไหม
แม้ว่าส่วนขยายสามารถใช้อินเทอร์เฟซ Storage
(เข้าถึงได้จาก window.localStorage
) ในบางบริบท (ป๊อปอัปและหน้า HTML อื่นๆ) แต่ไม่แนะนำให้ใช้เนื่องจากสาเหตุต่อไปนี้
- ผู้ปฏิบัติงานของบริการส่วนขยายใช้ Web Storage API ไม่ได้
- สคริปต์เนื้อหาจะใช้พื้นที่เก็บข้อมูลร่วมกับหน้าโฮสต์
- ข้อมูลที่บันทึกโดยใช้ Web Storage API จะสูญหายไปเมื่อผู้ใช้ล้างประวัติการท่องเว็บ
หากต้องการย้ายข้อมูลจาก API พื้นที่เก็บข้อมูลบนเว็บไปยัง API พื้นที่เก็บข้อมูลส่วนขยายจาก Service Worker ให้ทำดังนี้
- เตรียมหน้าเอกสาร HTML และไฟล์สคริปต์ที่ไม่ได้อยู่บนหน้าจอ ไฟล์สคริปต์ควรมีกิจวัตร Conversion และเครื่องจัดการ
onMessage
- ในโปรแกรมทำงานของบริการส่วนขยาย ให้ตรวจสอบ
chrome.storage
สำหรับข้อมูล - หากไม่พบข้อมูล โปรดโทรหา
createDocument()
- หลังจาก Promise ที่แสดงผลเสร็จสมบูรณ์แล้ว ให้เรียกใช้
sendMessage()
เพื่อเริ่มกิจวัตร Conversion - เรียกใช้กิจวัตร Conversion ภายในตัวแฮนเดิล
onMessage
ของเอกสารนอกหน้าจอ
นอกจากนี้ ยังมีความแตกต่างเล็กๆ น้อยๆ เกี่ยวกับวิธีการทำงานของ 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
เป็นหนึ่งในหลายๆ รายการที่เราแนะนำสำหรับโปรแกรมทำงานของบริการ 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);
}
});
การโหลดล่วงหน้าแบบไม่พร้อมกันจากพื้นที่เก็บข้อมูล
เนื่องจากโปรแกรมทำงานของบริการไม่ได้ทำงานตลอดเวลา ในบางครั้งส่วนขยายไฟล์ 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
เหตุการณ์<functionvoid>
Chrome เวอร์ชัน 73 ขึ้นไปเริ่มทำงานเมื่อมีการเปลี่ยนแปลงอย่างน้อย 1 รายการ
ฟังก์ชัน
onChanged.addListener
มีลักษณะดังนี้(callback: function) => {...}
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(changes: object) => void
-
การเปลี่ยนแปลง
ออบเจ็กต์
-
-
-
ล้าง
void
สัญญานำรายการทั้งหมดออกจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
clear
มีลักษณะดังนี้(callback?: function) => {...}
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome เวอร์ชัน 88 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
-
รับ
void
สัญญารับอย่างน้อย 1 รายการจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
get
มีลักษณะดังนี้(keys?: string | string[] | object, callback?: function) => {...}
-
กุญแจ
string | string[] | object ไม่บังคับ
คีย์เดียวที่จะรับ รายการคีย์ที่จะรับ หรือพจนานุกรมที่ระบุค่าเริ่มต้น (ดูคำอธิบายของออบเจ็กต์) รายการหรือออบเจ็กต์ที่ว่างเปล่าจะแสดงออบเจ็กต์ผลลัพธ์ที่ว่างเปล่า ส่งบัตร
null
เพื่อรับพื้นที่เก็บข้อมูลทั้งหมด -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(items: object) => void
-
items
ออบเจ็กต์
ออบเจ็กต์ที่มีรายการในการแมปคีย์-ค่า
-
-
returns
Promise<object>
Chrome เวอร์ชัน 88 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
-
getBytesInUse
void
สัญญารับปริมาณพื้นที่ (ในหน่วยไบต์) ที่ใช้โดยรายการอย่างน้อย 1 รายการ
ฟังก์ชัน
getBytesInUse
มีลักษณะดังนี้(keys?: string | string[], callback?: function) => {...}
-
กุญแจ
string | string[] ไม่บังคับ
คีย์เดียวหรือรายการคีย์เดียวเพื่อดูการใช้งานทั้งหมด รายการที่ว่างเปล่าจะแสดงค่า 0 ส่งบัตรภายใน
null
เพื่อดูปริมาณการใช้พื้นที่เก็บข้อมูลทั้งหมด -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(bytesInUse: number) => void
-
bytesInUse
ตัวเลข
ปริมาณพื้นที่ที่ใช้ในพื้นที่เก็บข้อมูลในหน่วยไบต์
-
-
returns
คำมั่นสัญญา<number>
Chrome เวอร์ชัน 88 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
-
นำข้อมูลออก
void
สัญญานำอย่างน้อย 1 รายการออกจากพื้นที่เก็บข้อมูล
ฟังก์ชัน
remove
มีลักษณะดังนี้(keys: string | string[], callback?: function) => {...}
-
กุญแจ
สตริง | สตริง[]
คีย์เดียวหรือชุดคีย์สำหรับรายการที่จะนำออก
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome เวอร์ชัน 88 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
-
ตั้งค่า
void
สัญญาตั้งค่าได้หลายรายการ
ฟังก์ชัน
set
มีลักษณะดังนี้(items: object, callback?: function) => {...}
-
items
ออบเจ็กต์
ออบเจ็กต์ที่กำหนดคู่คีย์/ค่าแต่ละคู่สำหรับอัปเดตพื้นที่เก็บข้อมูล คู่คีย์/ค่าอื่นๆ ในพื้นที่เก็บข้อมูลจะไม่ได้รับผลกระทบ
ค่าพื้นฐาน เช่น ตัวเลข จะเรียงตามลำดับตามที่คาดไว้ โดยทั่วไปค่าที่มี
typeof
"object"
และ"function"
จะเรียงตามลำดับเป็น{}
ยกเว้นArray
(ทำให้เป็นอนุกรมตามที่คาดไว้),Date
และRegex
(ทำให้เป็นอนุกรมโดยใช้การแทนString
) -
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
-
returns
Promise<void>
Chrome เวอร์ชัน 88 ขึ้นไปManifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
-
setAccessLevel
void
คำมั่นสัญญา Chrome 102 ขึ้นไปตั้งค่าระดับการเข้าถึงที่ต้องการสำหรับพื้นที่เก็บข้อมูล ค่าเริ่มต้นคือบริบทที่เชื่อถือได้เท่านั้น
ฟังก์ชัน
setAccessLevel
มีลักษณะดังนี้(accessOptions: object, callback?: function) => {...}
-
accessOptions
ออบเจ็กต์
-
accessLevel
ระดับการเข้าถึงพื้นที่เก็บข้อมูล
-
-
Callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
-
returns
Promise<void>
Manifest V3 ขึ้นไปรองรับคำสัญญา แต่จะใช้โค้ดเรียกกลับเพื่อความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 ฟีเจอร์ในการเรียกใช้ฟังก์ชันเดียวกันได้ คำสัญญาจะยุติด้วยประเภทเดียวกันกับที่ส่งไปยังโค้ดเรียกกลับ
-
StorageChange
พร็อพเพอร์ตี้
-
newValue
รายการใดก็ได้ ไม่บังคับ
ค่าใหม่ของสินค้า หากมีค่าใหม่
-
oldValue
รายการใดก็ได้ ไม่บังคับ
ค่าเดิมของสินค้า หากมีค่าเก่า
พร็อพเพอร์ตี้
local
รายการในพื้นที่เก็บข้อมูล local
จะอยู่ในเครื่องแต่ละเครื่อง
ประเภท
StorageArea และวัตถุ
พร็อพเพอร์ตี้
-
QUOTA_BYTES
10485760
จำนวนข้อมูลสูงสุด (เป็นไบต์) ที่สามารถจัดเก็บไว้ในพื้นที่เก็บข้อมูลในเครื่อง ซึ่งวัดโดยสตริง JSON ของทุกค่าบวกกับความยาวของคีย์ทุกรายการ ระบบจะไม่สนใจค่านี้หากส่วนขยายมีสิทธิ์
unlimitedStorage
การอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จในทันทีและตั้งค่าruntime.lastError
เมื่อใช้ Callback หรือ Promise ที่ถูกปฏิเสธหากใช้การซิงค์/รอ
managed
รายการในพื้นที่เก็บข้อมูล managed
จะกำหนดโดยนโยบายระดับองค์กรที่ผู้ดูแลระบบโดเมนเป็นผู้กำหนดค่า และจะเป็นแบบอ่านอย่างเดียวสำหรับส่วนขยาย การพยายามแก้ไขเนมสเปซนี้ทำให้เกิดข้อผิดพลาด โปรดดูข้อมูลเกี่ยวกับการกำหนดค่านโยบายที่หัวข้อไฟล์ Manifest สำหรับพื้นที่เก็บข้อมูล
ประเภท
session
รายการในพื้นที่เก็บข้อมูล session
จะจัดเก็บไว้ในหน่วยความจำและจะไม่อยู่ในดิสก์
ประเภท
StorageArea และวัตถุ
พร็อพเพอร์ตี้
-
QUOTA_BYTES
10485760
จำนวนสูงสุด (เป็นไบต์) ของข้อมูลที่สามารถจัดเก็บไว้ในหน่วยความจำ ซึ่งวัดโดยการประมาณการใช้งานหน่วยความจำที่จัดสรรแบบไดนามิกของทุกค่าและคีย์ การอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จโดยทันทีและตั้งค่า
runtime.lastError
เมื่อใช้โค้ดเรียกกลับหรือเมื่อมีการปฏิเสธ "คำสัญญา"
sync
รายการในพื้นที่เก็บข้อมูล sync
จะซิงค์โดยใช้การซิงค์ของ Chrome
ประเภท
StorageArea และวัตถุ
พร็อพเพอร์ตี้
-
MAX_ITEMS
512
จำนวนรายการสูงสุดที่สามารถจัดเก็บไว้ในพื้นที่เก็บข้อมูลที่ซิงค์ การอัปเดตที่ทำให้เกินขีดจำกัดนี้จะดำเนินการไม่สำเร็จในทันที และจะตั้งค่า
runtime.lastError
เมื่อใช้โค้ดเรียกกลับหรือเมื่อมีการปฏิเสธ "คำสัญญา" -
MAX_SUSTAINED_WRITE_OPERATIONS_PER_MINUTE
1000,000
เลิกใช้งานแล้วStorage.sync API ไม่มีโควต้าการดำเนินการเขียนอย่างต่อเนื่องอีกต่อไป
-
MAX_WRITE_OPERATIONS_PER_HOUR
1,800
จำนวนการดำเนินการสูงสุด
set
,remove
หรือclear
ที่ดำเนินการได้ในแต่ละชั่วโมง โดยเท่ากับ 1 ทุก 2 วินาที ซึ่งเป็นเพดานที่ต่ำกว่าขีดจำกัดการเขียนต่อนาทีที่สูงกว่าขีดจำกัดในระยะสั้นการอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จโดยทันทีและตั้งค่า
runtime.lastError
เมื่อใช้โค้ดเรียกกลับหรือเมื่อมีการปฏิเสธ "คำสัญญา" -
MAX_WRITE_OPERATIONS_PER_MINUTE
120
จำนวนการดำเนินการสูงสุด
set
,remove
หรือclear
ที่ดำเนินการได้ในแต่ละนาที ซึ่งเท่ากับ 2 ต่อวินาที ซึ่งให้อัตราการส่งข้อมูลสูงกว่าการเขียนต่อชั่วโมงในช่วงเวลาที่สั้นลงการอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จโดยทันทีและตั้งค่า
runtime.lastError
เมื่อใช้โค้ดเรียกกลับหรือเมื่อมีการปฏิเสธ "คำสัญญา" -
QUOTA_BYTES
102400
จำนวนรวมของข้อมูลสูงสุด (เป็นไบต์) ที่สามารถจัดเก็บไว้ในพื้นที่เก็บข้อมูลที่ซิงค์ ซึ่งวัดโดยสตริง JSON ของทุกค่าบวกกับความยาวของคีย์ทุกรายการ การอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จโดยทันทีและตั้งค่า
runtime.lastError
เมื่อใช้โค้ดเรียกกลับหรือเมื่อมีการปฏิเสธ "คำสัญญา" -
QUOTA_BYTES_PER_ITEM
8192
ขนาดสูงสุด (เป็นไบต์) ของแต่ละรายการในพื้นที่เก็บข้อมูลที่ซิงค์ ซึ่งวัดโดยสตริง JSON ของค่าบวกกับความยาวของคีย์ การอัปเดตที่มีรายการที่มีขนาดใหญ่กว่าขีดจำกัดนี้จะไม่สำเร็จทันทีและตั้งค่า
runtime.lastError
เมื่อใช้การเรียกกลับ หรือเมื่อคำสัญญาถูกปฏิเสธ
เหตุการณ์
onChanged
chrome.storage.onChanged.addListener(
callback: function,
)
เริ่มทำงานเมื่อมีการเปลี่ยนแปลงอย่างน้อย 1 รายการ
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(changes: object, areaName: string) => void
-
การเปลี่ยนแปลง
ออบเจ็กต์
-
areaName
string
-