ส่วนขยายสามารถจัดเก็บคุกกี้และเข้าถึง 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