คีย์ "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