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

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

โปรดดูข้อมูลเกี่ยวกับ API ส่วนขยายที่ chrome.storage

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

ในส่วนขยาย คุณควรใช้ API พื้นที่เก็บข้อมูลแพลตฟอร์มเว็บ ส่วนนี้จะสำรวจลักษณะการทำงานของ API เหล่านี้ในบริบทของส่วนขยาย ซึ่งบางครั้งอาจแตกต่างจากลักษณะการทำงานบนเว็บ

ความต่อเนื่อง

ระบบจะไม่ล้างพื้นที่เก็บข้อมูลส่วนขยายเมื่อผู้ใช้ล้างข้อมูลการท่องเว็บ โดยจะมีผลกับข้อมูลที่จัดเก็บไว้โดยใช้ API พื้นที่เก็บข้อมูลเว็บ (เช่น พื้นที่เก็บข้อมูลในเครื่อง และ IndexedDB)

โดยค่าเริ่มต้น ส่วนขยายจะมีข้อจำกัดด้านโควต้าพื้นที่เก็บข้อมูลตามปกติ ซึ่งตรวจสอบได้โดยการเรียกใช้ navigator.storage.estimate() นอกจากนี้ พื้นที่เก็บข้อมูลอาจถูกนำออกเนื่องจากหน่วยความจำที่มีแรงกดดันสูง แม้ว่าสิ่งนี้จะไม่ได้เกิดขึ้นบ่อยนัก วิธีหลีกเลี่ยงปัญหามีดังนี้

  • ขอสิทธิ์ "unlimitedStorage" ซึ่งส่งผลต่อทั้ง API ของส่วนขยายและพื้นที่เก็บข้อมูลบนเว็บ และยกเว้นส่วนขยายจากทั้งการจำกัดโควต้าและการถอนสิทธิ์
  • โทรหา navigator.storage.persist() เพื่อป้องกันการถูกปลด

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

การเข้าถึงในโปรแกรมทำงานของบริการ

API ของ IndexedDB และ Cache Storage จะเข้าถึงได้ภายในโปรแกรมทำงานของบริการ แต่จะไม่รวมถึงพื้นที่เก็บข้อมูลในเครื่องและพื้นที่เก็บข้อมูลเซสชัน

หากต้องการเข้าถึงพื้นที่เก็บข้อมูลในเครื่องหรือพื้นที่เก็บข้อมูลเซสชันจาก Service Worker ให้ใช้เอกสารนอกหน้าจอ

การแบ่งพาร์ติชัน

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

ตั้งแต่ Chrome 115 เป็นต้นไป การแบ่งพาร์ติชันพื้นที่เก็บข้อมูลจะแนะนำการเปลี่ยนแปลงวิธีกำหนดคีย์การแบ่งพาร์ติชันเพื่อป้องกันการติดตามข้ามเว็บไซต์บางประเภท ในทางปฏิบัติหมายความว่าหากเว็บไซต์ A ฝัง iframe ที่มีเว็บไซต์ B ไว้ เว็บไซต์ B จะไม่สามารถเข้าถึงพื้นที่เก็บข้อมูลแบบเดียวกับที่เคยมีเมื่อไปที่แท็กโดยตรง

โดยมีข้อยกเว้น 2 รายการต่อไปนี้เพื่อลดผลกระทบจากปัญหานี้ในส่วนขยาย

  • หากหน้าเว็บที่มีรูปแบบ chrome-extension:// ฝังอยู่ในเว็บไซต์ใดก็ตาม การแบ่งพาร์ติชันพื้นที่เก็บข้อมูลจะไม่มีผล และส่วนขยายจะมีสิทธิ์เข้าถึงพาร์ติชันระดับบนสุด
  • หากหน้าเว็บที่มีรูปแบบ chrome-extension:// มี iframe และส่วนขยายมีสิทธิ์ของโฮสต์สำหรับเว็บไซต์ที่ฝังอยู่ เว็บไซต์นั้นก็จะมีสิทธิ์เข้าถึงพาร์ติชันระดับบนสุดด้วย

คุกกี้

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

คุกกี้ที่ปลอดภัย

รองรับแอตทริบิวต์คุกกี้ Secure สำหรับรูปแบบ https:// เท่านั้น ดังนั้น หน้าเว็บ chrome-extension:// จึงไม่สามารถตั้งค่าคุกกี้ด้วยแอตทริบิวต์นี้ได้

ซึ่งหมายความว่าหน้าส่วนขยายจะใช้แอตทริบิวต์คุกกี้อื่นๆ ที่จำเป็นต้องใช้แอตทริบิวต์ Secure ไม่ได้ด้วย

การแบ่งพาร์ติชันและการทำงานที่ใช้ SameSite

คุกกี้ที่ตั้งค่าในหน้า chrome-extension:// จะใช้ SameSite=Lax เสมอ ด้วยเหตุนี้ คุกกี้ที่ตั้งค่าโดยส่วนขยายในต้นทางเองจะเข้าถึงไม่ได้ในเฟรม และการแบ่งพาร์ติชันก็ไม่เกี่ยวข้อง

สำหรับคุกกี้ที่เชื่อมโยงกับเว็บไซต์ของบุคคลที่สาม เช่น เว็บไซต์ของบุคคลที่สามซึ่งโหลดในเฟรมบนหน้าส่วนขยาย หรือคำขอที่สร้างจากหน้าส่วนขยายไปยังต้นทางของบุคคลที่สาม คุกกี้จะทำงานเหมือนกับเว็บ ยกเว้นใน 2 ลักษณะต่อไปนี้

  • คุกกี้ของบุคคลที่สามจะไม่ถูกบล็อกแม้แต่ในเฟรมย่อย หากหน้าระดับบนสุดของแท็บใดแท็บหนึ่งเป็นหน้า chrome-extension://
  • คำขอจากส่วนขยายที่ส่งไปยังบุคคลที่สามจะถือเป็นเว็บไซต์เดียวกัน หากส่วนขยายนั้นมีสิทธิ์โฮสต์สำหรับบุคคลที่สามนั้น ซึ่งหมายความว่าระบบจะส่งคุกกี้ SameSite=Strict ได้ โปรดทราบว่าวิธีนี้ใช้ได้กับคำขอเครือข่ายเท่านั้น โดยไม่สามารถเข้าถึงผ่าน document.cookie ใน JavaScript และจะไม่มีผลหากคุกกี้ของบุคคลที่สามถูกบล็อก

โปรดทราบว่างาน Privacy Sandbox จะส่งผลต่อการตั้งค่าคุกกี้ของบุคคลที่สามและจะปรับตามไทม์ไลน์

chrome.cookies API ให้การควบคุมคีย์พาร์ติชันที่จะใช้กับเมธอด API แต่ละเมธอด ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิง API