chrome.storage

คำอธิบาย

ใช้ chrome.storage API เพื่อจัดเก็บ เรียกข้อมูล และติดตามการเปลี่ยนแปลงของข้อมูลผู้ใช้

สิทธิ์

storage

ภาพรวม

Storage API เป็นวิธีเฉพาะสำหรับส่วนขยายในการคงข้อมูลและสถานะของผู้ใช้ไว้ ซึ่งคล้ายกับ API พื้นที่เก็บข้อมูลของแพลตฟอร์มเว็บ (IndexedDB และพื้นที่เก็บข้อมูล) แต่ได้รับการออกแบบมาเพื่อตอบสนองความต้องการด้านพื้นที่เก็บข้อมูลของส่วนขยาย ฟีเจอร์สำคัญบางส่วนมีดังนี้

  • บริบทของส่วนขยายทั้งหมด รวมถึงโปรแกรมทำงานของบริการส่วนขยายและสคริปต์เนื้อหามีสิทธิ์เข้าถึง Storage API
  • ค่าที่ทำให้เป็นอนุกรมของ JSON จะจัดเก็บเป็นพร็อพเพอร์ตี้ออบเจ็กต์
  • Storage API ทำงานไม่พร้อมกันกับการดำเนินการอ่านและเขียนจำนวนมาก
  • แม้ว่าผู้ใช้จะล้างแคชและประวัติการท่องเว็บ แต่ข้อมูลจะยังคงอยู่
  • การตั้งค่าที่จัดเก็บไว้จะยังคงอยู่แม้ว่าจะใช้แยกส่วนแบบไม่ระบุตัวตนก็ตาม
  • รวมพื้นที่เก็บข้อมูลที่มีการจัดการแบบอ่านอย่างเดียวโดยเฉพาะสำหรับนโยบายองค์กร

แม้ว่าส่วนขยายจะสามารถใช้อินเทอร์เฟซ [Storage][mdn-storage] (เข้าถึงได้จาก window.localStorage) ในบางบริบท (ป๊อปอัปและหน้า HTML อื่นๆ) แต่ไม่แนะนำด้วยเหตุผลต่อไปนี้

  • Service Worker ของส่วนขยายไม่สามารถเข้าถึง Storage
  • สคริปต์เนื้อหาจะใช้พื้นที่เก็บข้อมูลร่วมกับหน้าโฮสต์
  • ข้อมูลที่บันทึกโดยใช้อินเทอร์เฟซ Storage จะสูญหายเมื่อผู้ใช้ล้างประวัติการท่องเว็บ

หากต้องการย้ายข้อมูลจาก API พื้นที่เก็บข้อมูลบนเว็บไปยัง API พื้นที่เก็บข้อมูลส่วนขยายจาก Service Worker ให้ทำดังนี้

  1. สร้างเอกสารนอกหน้าจอด้วยกิจวัตร Conversion และตัวแฮนเดิล [onMessage][on-message]
  2. เพิ่มกิจวัตร Conversion ลงในเอกสารนอกหน้าจอ
  3. ในโปรแกรมทำงานของบริการส่วนขยาย ให้ตรวจสอบ chrome.storage สำหรับข้อมูล
  4. หากไม่พบข้อมูล ให้ [create][create-offscreen] เอกสารนอกหน้าจอ แล้วเรียกใช้ [sendMessage()][send-message] เพื่อเริ่มกิจวัตร Conversion
  5. เรียกใช้กิจวัตร Conversion ภายในตัวแฮนเดิล onMessage ของเอกสารนอกหน้าจอ

นอกจากนี้ยังมีความแตกต่างเล็กๆ น้อยๆ เกี่ยวกับวิธีการทำงานของ API พื้นที่เก็บข้อมูลบนเว็บในส่วนขยายด้วย ดูข้อมูลเพิ่มเติมได้ในบทความ [Storage and Cookies][storage-and-cookies]

พื้นที่เก็บข้อมูล

Storage API แบ่งออกเป็น 4 ที่เก็บข้อมูล ("พื้นที่เก็บข้อมูล") ดังต่อไปนี้

storage.local
ระบบจะจัดเก็บข้อมูลไว้ในเครื่อง ซึ่งจะล้างออกเมื่อนำส่วนขยายออก ขีดจำกัดของโควต้าจะอยู่ที่ประมาณ 10 MB แต่สามารถเพิ่มได้ด้วยการขอสิทธิ์ "unlimitedStorage" ลองใช้เพื่อจัดเก็บข้อมูลปริมาณมาก
storage.sync
หากเปิดใช้การซิงค์อยู่ ข้อมูลจะซิงค์กับเบราว์เซอร์ Chrome ที่ผู้ใช้เข้าสู่ระบบ หากปิดใช้ จะมีลักษณะการทำงานเหมือน storage.local Chrome จัดเก็บข้อมูลไว้ภายในเครื่องเมื่อเบราว์เซอร์ออฟไลน์ และซิงค์ต่อเมื่อกลับมาออนไลน์ ขีดจำกัดโควต้าคือประมาณ 100 KB หรือ 8 KB ต่อรายการ ลองใช้วิธีนี้เพื่อเก็บรักษาการตั้งค่าของผู้ใช้ในเบราว์เซอร์ที่ซิงค์ไว้
storage.session
เก็บข้อมูลไว้ในหน่วยความจำระหว่างเซสชันของเบราว์เซอร์ ซึ่งจะไม่แสดงสคริปต์เนื้อหาโดยค่าเริ่มต้น แต่คุณเปลี่ยนลักษณะการทำงานนี้ได้โดยการตั้งค่า chrome.storage.session.setAccessLevel() ขีดจำกัดโควต้าคือประมาณ 10 MB ลองใช้เพื่อจัดเก็บตัวแปรร่วมในการเรียกใช้ Service Worker
storage.managed
ผู้ดูแลระบบสามารถใช้สคีมาและนโยบายองค์กรเพื่อกำหนดการตั้งค่าของส่วนขยายที่รองรับในสภาพแวดล้อมที่มีการจัดการได้ พื้นที่เก็บข้อมูลนี้เป็นแบบอ่านอย่างเดียว

ไฟล์ Manifest

หากต้องการใช้ API พื้นที่เก็บข้อมูล ให้ประกาศสิทธิ์ "storage" ในไฟล์ Manifest ของส่วนขยาย เช่น

{
  "name": "My extension",
  ...
  "permissions": [
    "storage"
  ],
  ...
}

การใช้งาน

ตัวอย่างต่อไปนี้แสดงพื้นที่เก็บข้อมูล local, sync และ 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);
});

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับพื้นที่เก็บข้อมูลของ managed โปรดดูไฟล์ Manifest สำหรับพื้นที่เก็บข้อมูล

ขีดจำกัดพื้นที่เก็บข้อมูลและการควบคุม

อย่ามองการเพิ่มไปยัง Storage 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);
});

ตัวอย่างส่วนขยาย

หากต้องการดูการสาธิตอื่นๆ ของ 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 ขึ้นไป

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

  • รับ

    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 ขึ้นไป

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

  • getBytesInUse

    void

    สัญญา

    รับปริมาณพื้นที่ (ในหน่วยไบต์) ที่ใช้โดยรายการอย่างน้อย 1 รายการ

    ฟังก์ชัน getBytesInUse มีลักษณะดังนี้

    (keys?: string|string[],callback?: function)=> {...}

    • กุญแจ

      string|string[] optional

      คีย์เดียวหรือรายการคีย์เดียวเพื่อดูการใช้งานทั้งหมด รายการที่ว่างเปล่าจะแสดงค่า 0 ส่งบัตรภายใน null เพื่อดูปริมาณการใช้พื้นที่เก็บข้อมูลทั้งหมด

    • Callback

      ฟังก์ชัน ไม่บังคับ

      พารามิเตอร์ callback มีลักษณะดังนี้

      (bytesInUse: number)=>void

      • bytesInUse

        ตัวเลข

        ปริมาณพื้นที่ที่ใช้ในพื้นที่เก็บข้อมูลในหน่วยไบต์

    • returns

      คำมั่นสัญญา<number>

      Chrome เวอร์ชัน 88 ขึ้นไป

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

  • นำข้อมูลออก

    void

    สัญญา

    นำอย่างน้อย 1 รายการออกจากพื้นที่เก็บข้อมูล

    ฟังก์ชัน remove มีลักษณะดังนี้

    (keys: string|string[],callback?: function)=> {...}

    • กุญแจ

      สตริง|สตริง[]

      คีย์เดียวหรือชุดคีย์สำหรับรายการที่จะนำออก

    • Callback

      ฟังก์ชัน ไม่บังคับ

      พารามิเตอร์ callback มีลักษณะดังนี้

      ()=>void

    • returns

      Promise<void>

      Chrome เวอร์ชัน 88 ขึ้นไป

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

  • ตั้งค่า

    void

    สัญญา

    ตั้งค่าได้หลายรายการ

    ฟังก์ชัน set มีลักษณะดังนี้

    (items: object,callback?: function)=> {...}

    • items

      ออบเจ็กต์

      ออบเจ็กต์ที่กำหนดคู่คีย์/ค่าแต่ละคู่สำหรับอัปเดตพื้นที่เก็บข้อมูล คู่คีย์/ค่าอื่นๆ ในพื้นที่เก็บข้อมูลจะไม่ได้รับผลกระทบ

      ค่าพื้นฐาน เช่น ตัวเลข จะเรียงตามลำดับตามที่คาดไว้ โดยทั่วไปค่าที่มี typeof "object" และ "function" จะเรียงตามลำดับเป็น {} ยกเว้น Array (ทำให้เป็นอนุกรมตามที่คาดไว้), Date และ Regex (ทำให้เป็นอนุกรมโดยใช้การแทน String)

    • Callback

      ฟังก์ชัน ไม่บังคับ

      พารามิเตอร์ callback มีลักษณะดังนี้

      ()=>void

    • returns

      Promise<void>

      Chrome เวอร์ชัน 88 ขึ้นไป

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

  • setAccessLevel

    void

    คำมั่นสัญญา Chrome 102 ขึ้นไป

    ตั้งค่าระดับการเข้าถึงที่ต้องการสำหรับพื้นที่เก็บข้อมูล ค่าเริ่มต้นคือบริบทที่เชื่อถือได้เท่านั้น

    ฟังก์ชัน setAccessLevel มีลักษณะดังนี้

    (accessOptions: object,callback?: function)=> {...}

    • accessOptions

      ออบเจ็กต์

      • accessLevel

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

    • Callback

      ฟังก์ชัน ไม่บังคับ

      พารามิเตอร์ callback มีลักษณะดังนี้

      ()=>void

    • returns

      Promise<void>

      Promiss รองรับเฉพาะไฟล์ Manifest V3 ขึ้นไป ส่วนแพลตฟอร์มอื่นๆ จะต้องใช้โค้ดเรียกกลับ

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

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