ไฟล์ Manifest - แหล่งข้อมูลที่เข้าถึงได้ทางเว็บ

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

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

การประกาศไฟล์ Manifest

ใช้พร็อพเพอร์ตี้ web_accessible_resources ของไฟล์ Manifest เพื่อประกาศทรัพยากรที่เปิดเผยและ มีที่มาอะไร พร็อพเพอร์ตี้นี้คืออาร์เรย์ของออบเจ็กต์ที่ประกาศกฎการเข้าถึงทรัพยากร ออบเจ็กต์แต่ละรายการ แสดงรายการทรัพยากรส่วนขยายจำนวนหนึ่งและต้องระบุค่าสำหรับ matches อย่างน้อย 1 รายการหรือ extension_ids คีย์เพื่อระบุต้นทางที่เข้าถึงทรัพยากรเหล่านี้ได้

{
  ...
  "web_accessible_resources": [
    {
      "resources": [ "test1.png", "test2.png" ],
      "matches": [ "https://web-accessible-resources-1.glitch.me/*" ]
    }, {
      "resources": [ "test3.png", "test4.png" ],
      "matches": [ "https://web-accessible-resources-2.glitch.me/*" ]
    }
  ],
  ...
}

ออบเจ็กต์แต่ละรายการในอาร์เรย์มีองค์ประกอบต่อไปนี้

"resources"
อาร์เรย์ของสตริง โดยแต่ละสตริงมีเส้นทางที่เกี่ยวข้องไปยังทรัพยากรที่ระบุจากไดเรกทอรีรากของส่วนขยาย ทรัพยากรอาจมีเครื่องหมายดอกจัน (*) สำหรับการจับคู่ไวลด์การ์ด ตัวอย่างเช่น "/images/*" จะแสดงทุกอย่างในไดเรกทอรี images/ ของส่วนขยายแบบวนซ้ำ ขณะที่ "*.png" จะแสดงไฟล์ PNG ทั้งหมด
"matches"
อาร์เรย์ของสตริง แต่ละสตริงจะมีรูปแบบการจับคู่ ซึ่งระบุเว็บไซต์ที่เข้าถึงชุดทรัพยากรนี้ได้ ระบบจะใช้เฉพาะต้นทางในการจับคู่ URL ต้นทางมีการจับคู่โดเมนย่อย Google Chrome แสดง "รูปแบบการจับคู่ไม่ถูกต้อง" หากรูปแบบมีเส้นทางอื่นที่ไม่ใช่ "/*"
"extension_ids"
อาร์เรย์ของสตริง โดยแต่ละสตริงมีรหัสของส่วนขยายที่เข้าถึงทรัพยากรได้

องค์ประกอบแต่ละรายการต้องมีองค์ประกอบ "resources" และองค์ประกอบ "matches" หรือ "extension_ids" การดำเนินการนี้จะสร้างการจับคู่ที่แสดงทรัพยากรที่ระบุไปยังหน้าเว็บที่ตรงกับรูปแบบหรือส่วนขยายที่มีรหัสตรงกัน

แหล่งข้อมูลจะอยู่ในหน้าเว็บโดยใช้ URL chrome-extension://[PACKAGE ID]/[PATH] ซึ่งสร้างขึ้นด้วย runtime.getURL() ทรัพยากรมีส่วนหัว CORS ที่เหมาะสม จึงสามารถพร้อมใช้งานได้ โดยใช้ fetch()

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

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

สคริปต์เนื้อหาไม่จำเป็นต้องได้รับอนุญาตเอง

ตัวอย่าง

ตัวอย่างทรัพยากรที่เข้าถึงได้ในเว็บสาธิตการใช้องค์ประกอบนี้ในส่วนขยายที่ใช้งานได้