chrome.storage

คำอธิบาย

ใช้ 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

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

Chrome 102 ขึ้นไป

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

ค่าแจกแจง

"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

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

รายการในพื้นที่เก็บข้อมูล 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

      สตริง