chrome.storage

คำอธิบาย

ใช้ 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 ให้ทำดังนี้

  1. เตรียมหน้าเอกสาร HTML และไฟล์สคริปต์ที่ไม่ได้อยู่บนหน้าจอ ไฟล์สคริปต์ควรมีกิจวัตร Conversion และเครื่องจัดการ onMessage
  2. ในโปรแกรมทำงานของบริการส่วนขยาย ให้ตรวจสอบ chrome.storage สำหรับข้อมูล
  3. หากไม่พบข้อมูล โปรดโทรหา createDocument()
  4. หลังจาก Promise ที่แสดงผลเสร็จสมบูรณ์แล้ว ให้เรียกใช้ sendMessage() เพื่อเริ่มกิจวัตร Conversion
  5. เรียกใช้กิจวัตร 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

Chrome 102 ขึ้นไป

ระดับการเข้าถึงของพื้นที่เก็บข้อมูล

ค่าแจกแจง

"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 optional

      คีย์เดียวที่จะรับ รายการคีย์ที่จะรับ หรือพจนานุกรมที่ระบุค่าเริ่มต้น (ดูคำอธิบายของออบเจ็กต์) รายการหรือออบเจ็กต์ที่ว่างเปล่าจะแสดงออบเจ็กต์ผลลัพธ์ที่ว่างเปล่า ส่งบัตร 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[] optional

      คีย์เดียวหรือรายการคีย์เดียวเพื่อดูการใช้งานทั้งหมด รายการที่ว่างเปล่าจะแสดงค่า 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

Chrome 102 ขึ้นไป MV3 ขึ้นไป

รายการในพื้นที่เก็บข้อมูล session จะจัดเก็บไว้ในหน่วยความจำและจะไม่อยู่ในดิสก์

ประเภท

StorageArea&ออบเจ็กต์

พร็อพเพอร์ตี้

  • QUOTA_BYTES

    10485760

    จำนวนสูงสุด (เป็นไบต์) ของข้อมูลที่สามารถจัดเก็บไว้ในหน่วยความจำ ซึ่งวัดโดยการประมาณการใช้งานหน่วยความจำที่จัดสรรแบบไดนามิกของทุกค่าและคีย์ การอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จในทันทีและตั้งค่า runtime.lastError เมื่อใช้โค้ดเรียกกลับหรือเมื่อ Promise ถูกปฏิเสธ

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 เมื่อใช้โค้ดเรียกกลับหรือเมื่อ Promise ถูกปฏิเสธ

  • MAX_WRITE_OPERATIONS_PER_MINUTE

    120

    จำนวนการดำเนินการสูงสุด set, remove หรือ clear ที่ดำเนินการได้ในแต่ละนาที ซึ่งเท่ากับ 2 ต่อวินาที ซึ่งให้อัตราการส่งข้อมูลสูงกว่าการเขียนต่อชั่วโมงในช่วงเวลาที่สั้นลง

    การอัปเดตที่อาจทำให้เกินขีดจำกัดนี้ไม่สำเร็จในทันทีและตั้งค่า runtime.lastError เมื่อใช้โค้ดเรียกกลับหรือเมื่อ Promise ถูกปฏิเสธ

  • 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