ส่วนขยายสามารถจัดเก็บคุกกี้และเข้าถึง API ของพื้นที่เก็บข้อมูลบนเว็บได้ในลักษณะเดียวกับเว็บไซต์ปกติ อย่างไรก็ตาม ใน บางกรณี ลักษณะการทำงานของฟีเจอร์เหล่านี้จะแตกต่างกันในส่วนขยาย
ดูข้อมูลเกี่ยวกับ Extension API ได้ที่ browser.storage
พื้นที่เก็บข้อมูล
การใช้ Storage API ของแพลตฟอร์มเว็บในส่วนขยายมักเป็นสิ่งที่ต้องการ ส่วนนี้จะสำรวจลักษณะการทำงานของ API เหล่านี้ในบริบทของส่วนขยาย ซึ่งบางครั้งอาจแตกต่างจากลักษณะการทำงานบนเว็บ
ความต่อเนื่อง
ระบบจะไม่ล้างพื้นที่เก็บข้อมูลของส่วนขยายเมื่อผู้ใช้ล้างข้อมูลการท่องเว็บ ซึ่งใช้กับข้อมูลทั้งหมดที่จัดเก็บโดยใช้ Web Storage API (เช่น Local Storage และ IndexedDB)
โดยค่าเริ่มต้น ส่วนขยายจะอยู่ภายใต้ข้อจำกัดของโควต้าปกติในพื้นที่เก็บข้อมูล ซึ่งสามารถตรวจสอบได้
โดยการเรียกใช้ navigator.storage.estimate() นอกจากนี้ ระบบยังอาจนำพื้นที่เก็บข้อมูลออกเมื่อ
หน่วยความจำทำงานหนัก แม้ว่ากรณีนี้จะเกิดขึ้นได้ยาก วิธีหลีกเลี่ยงปัญหานี้มีดังนี้
- ขอสิทธิ์
"unlimitedStorage"ซึ่งส่งผลต่อทั้งส่วนขยายและ API ของพื้นที่เก็บข้อมูลบนเว็บ รวมถึง ยกเว้นส่วนขยายจากทั้งข้อจำกัดของโควต้าและการนำออก - โทรหา
navigator.storage.persist()เพื่อขอรับการคุ้มครองจากการถูกขับไล่
พื้นที่เก็บข้อมูลของส่วนขยายจะแชร์ในต้นทางของส่วนขยาย ซึ่งรวมถึง Service Worker ของส่วนขยาย หน้าส่วนขยาย (รวมถึงป๊อปอัปและแผงด้านข้าง) และเอกสารนอกหน้าจอ ในสคริปต์เนื้อหา การเรียกใช้ Web Storage API จะเข้าถึงข้อมูลจากหน้าโฮสต์ที่สคริปต์เนื้อหาได้รับการแทรก ไม่ใช่ส่วนขยาย
การเข้าถึงใน Service Worker
API ของ IndexedDB และ Cache Storage สามารถเข้าถึงได้ใน Service Worker แต่ Local Storage และ Session Storage ไม่ใช่
หากต้องการเข้าถึง Local Storage หรือ Session Storage จาก Service Worker ให้ใช้เอกสารนอกหน้าจอ
การแบ่งพาร์ติชัน
การแบ่งพาร์ติชันคือการใช้คีย์สำหรับข้อมูลที่จัดเก็บเพื่อจำกัดตำแหน่งที่เข้าถึงได้ ที่ผ่านมา การจัดเก็บจะใช้คีย์ตามต้นทาง
ตั้งแต่ Chrome 115 เป็นต้นไป การแบ่งพาร์ติชันพื้นที่เก็บข้อมูลจะมีการเปลี่ยนแปลงวิธี กำหนดคีย์การแบ่งพาร์ติชันเพื่อป้องกันการติดตามข้ามเว็บไซต์บางประเภท ในทางปฏิบัติ หมายความว่าหากเว็บไซต์ ก ฝัง iframe ที่มีเว็บไซต์ ข เว็บไซต์ ข จะเข้าถึงพื้นที่เก็บข้อมูลเดียวกันไม่ได้ ซึ่งปกติแล้วจะเข้าถึงได้เมื่อไปยังเว็บไซต์ ข โดยตรง
เพื่อลดผลกระทบของเรื่องนี้ในส่วนขยาย จึงมีการยกเว้น 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 และจะปรับตามไทม์ไลน์
API browser.cookies ช่วยให้ควบคุมคีย์การแบ่งพาร์ติชันที่จะใช้กับเมธอด API แต่ละรายการได้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารอ้างอิง API