ไฟล์ Manifest - สคริปต์เนื้อหา

คีย์ "content_scripts" ระบุไฟล์ JavaScript หรือ CSS ที่โหลดแบบคงที่ที่จะใช้ทุกครั้งที่มีการเปิดหน้าที่ตรงกับ รูปแบบ URL ที่กำหนด ส่วนขยายยังแทรกสคริปต์เนื้อหาแบบเป็นโปรแกรมได้ด้วย โปรดดูรายละเอียดในการแทรกสคริปต์

ไฟล์ Manifest

คีย์เหล่านี้คือคีย์ที่รองรับสำหรับ "content_scripts" เฉพาะคีย์ "matches" และ "js" หรือ "css" เท่านั้นที่จำเป็น

manifest.json

{
 "name": "My extension",
 ...
 "content_scripts": [
   {
     "matches": ["https://*.example.com/*"],
     "css": ["my-styles.css"],
     "js": ["content-script.js"],
     "exclude_matches": ["*://*/*foo*"],
     "include_globs": ["*example.com/???s/*"],
     "exclude_globs": ["*bar*"],     
     "all_frames": false,
     "match_origin_as_fallback": false,
     "match_about_blank": false,
     "run_at": "document_idle",
     "world": "ISOLATED",
   }
 ],
 ...
}

Files

แต่ละไฟล์ต้องมีเส้นทางที่เกี่ยวข้องไปยังทรัพยากรในไดเรกทอรีรากของส่วนขยาย ระบบจะตัดเครื่องหมายทับ (/) ออกโดยอัตโนมัติ คีย์ "run_at" จะระบุเวลาที่จะแทรกแต่ละไฟล์

"css" - อาร์เรย์
ไม่บังคับ อาร์เรย์ของเส้นทางไฟล์ CSS ที่แทรกไว้ตามลําดับของอาร์เรย์นี้ และก่อนที่การสร้าง DOM หรือการแสดงผลหน้าเว็บจะเกิดขึ้น
"js" - อาร์เรย์
ไม่บังคับ อาร์เรย์ของเส้นทางไฟล์ JavaScript ที่แทรกตามลำดับที่ปรากฏในอาร์เรย์นี้ หลังจากการแทรกไฟล์ CSS แต่ละสตริงในอาร์เรย์ต้องเป็นเส้นทางสัมพัทธ์ไปยังทรัพยากรในไดเรกทอรีรากของส่วนขยาย ระบบจะตัดเครื่องหมายทับ ("/") ออกโดยอัตโนมัติ

จับคู่ URL

เฉพาะพร็อพเพอร์ตี้ "matches" เท่านั้นที่จำเป็น จากนั้นคุณสามารถใช้ "exclude_matches", "include_globs" และ "exclude_globs" เพื่อกำหนดค่า URL ที่จะแทรกโค้ด แป้น "matches" จะแสดงคำเตือน

"matches" - อาร์เรย์
ต้องระบุ ระบุรูปแบบ URL ที่จะแทรกสคริปต์เนื้อหาลงไป ดูการจับคู่รูปแบบสำหรับไวยากรณ์
"exclude_matches" - อาร์เรย์
ไม่บังคับ ยกเว้นรูปแบบ URL ที่จะแทรกสคริปต์เนื้อหาเข้าไป ดูการจับคู่รูปแบบสำหรับไวยากรณ์
"include_globs" - อาร์เรย์
ไม่บังคับ ใช้หลังการจับคู่เพื่อรวมเฉพาะ URL ที่ตรงกับ glob นี้ด้วย มีจุดประสงค์เพื่อจำลองคีย์เวิร์ด @include Greasemonkey
"exclude_globs" - อาร์เรย์
ไม่บังคับ ใช้หลังการจับคู่เพื่อยกเว้น URL ที่ตรงกับ glob นี้ มีจุดประสงค์เพื่อจำลองคีย์เวิร์ด @exclude Greasemonkey

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

ระบบจะแทรกสคริปต์เนื้อหาลงในหน้าเว็บในกรณีต่อไปนี้

  • URL ของรูปแบบตรงกับรูปแบบ "matches" และ "include_globs" ใดก็ได้
  • และ URL ไม่ตรงกับรูปแบบ "exclude_matches" หรือ "exclude_globs"

ตัวอย่างการจับคู่ GlOB และ URL

"include_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["https://???.example.com/foo/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
ตรงกับ
https://www.example.com/foo/bar
https://the.example.com/foo/
ไม่ตรงกัน
https://my.example.com/foo/bar
https://example.com/foo/*
https://www.example.com/foo

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "include_globs": ["*example.com/???s/*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
ตรงกับ
https://www.example.com/arts/index.html
https://www.example.com/jobs/index.html
ไม่ตรงกัน
https://www.example.com/sports/index.html
https://www.example.com/music/index.html

"exclude_globs"

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
ตรงกับ
https://history.example.com
https://.example.com/music
ไม่ตรงกัน
https://science.example.com
https://www.example.com/science

ตัวอย่างการปรับแต่งขั้นสูง

manifest.json

{
  ...
  "content_scripts": [
    {
      "matches": ["https://*.example.com/*"],
      "exclude_matches": ["*://*/*business*"],
      "include_globs": ["*example.com/???s/*"],
      "exclude_globs": ["*science*"],
      "js": ["content-script.js"]
    }
  ],
  ...
}
ตรงกับ
https://www.example.com/arts/index.html
https://.example.com/jobs/index.html
ไม่ตรงกัน
https://science.example.com
https://www.example.com/jobs/business
https://www.example.com/science

โครง

คีย์ "all_frames" ระบุว่าควรแทรกสคริปต์เนื้อหาลงในเฟรมทั้งหมดที่ตรงกับข้อกำหนด URL ที่ระบุหรือไม่ หากตั้งค่าเป็น false ระบบจะแทรกเฉพาะเฟรมบนสุดเท่านั้น ซึ่งสามารถใช้ร่วมกับ "match_about_blank" เพื่อแทรกลงในเฟรม about:blank ได้

หากต้องการแทรกลงในเฟรมอื่นๆ เช่น data:, blob: และ filesystem: ให้ตั้งค่า "match_origin_as_fallback" เป็น true โปรดดูรายละเอียดที่หัวข้อแทรกในเฟรมที่เกี่ยวข้อง

"all_frames" บูลีน
ไม่บังคับ ค่าเริ่มต้นคือ false ซึ่งหมายความว่าระบบจับคู่เฉพาะเฟรมด้านบนเท่านั้น หากตั้งค่าเป็น "จริง" ระบบจะแทรกลงในเฟรมทั้งหมด แม้ว่าเฟรมจะไม่ใช่เฟรมบนสุดในแท็บก็ตาม แต่ละเฟรมจะได้รับการตรวจสอบแยกกันสำหรับข้อกำหนด URL โดยจะไม่แทรกลงในเฟรมย่อยหากไม่เป็นไปตามข้อกำหนดของ URL
"match_about_blank" - บูลีน
ไม่บังคับ ค่าเริ่มต้นคือ false สคริปต์ควรแทรกลงในเฟรม about:blank ที่ URL หลักตรงกับรูปแบบหนึ่งที่ประกาศใน "matches" หรือไม่
"match_origin_as_fallback" - บูลีน
ไม่บังคับ ค่าเริ่มต้นคือ false สคริปต์ควรแทรกในเฟรมที่สร้างโดยต้นทางที่ตรงกัน แต่ URL หรือต้นทางอาจไม่ตรงกับรูปแบบโดยตรงหรือไม่ ซึ่งรวมถึงเฟรมที่มีรูปแบบต่างกัน เช่น about:, data:, blob: และ filesystem:

เวลาทำงานและสภาพแวดล้อมการดำเนินการ

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

"run_at" - document_start | document_end | document_idle
ไม่บังคับ ระบุเวลาที่ควรแทรกสคริปต์ลงในหน้าเว็บ ซึ่งสอดคล้องกับสถานะการโหลดของ Document.readyState
  • "document_start": DOM ยังคงโหลดอยู่
  • "document_end": ทรัพยากรของหน้าเว็บยังคงโหลดอยู่
  • "document_idle": โหลด DOM และทรัพยากรเสร็จแล้ว โดยตัวเลือกนี้คือค่าเริ่มต้น
"world" - ISOLATED | MAIN
ไม่บังคับ โลกของ JavaScript สำหรับสคริปต์ที่เรียกใช้ภายใน ค่าเริ่มต้นจะเป็น "ISOLATED" ซึ่งเป็นสภาพแวดล้อมการดำเนินการสำหรับสคริปต์เนื้อหาโดยเฉพาะ การเลือกโลก "MAIN" หมายความว่าสคริปต์จะแชร์สภาพแวดล้อมการดำเนินการกับ JavaScript ของหน้าเว็บโฮสต์ โปรดดูข้อมูลเพิ่มเติมที่ทำงานในโลกที่แยกกัน

ตัวอย่าง

ดูบทแนะนำเรียกใช้ในทุกหน้าเพื่อสร้างส่วนขยายที่แทรกสคริปต์เนื้อหาในไฟล์ Manifest