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

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

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

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

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

{
  ...
  "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"

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

ตัวอย่าง

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