คำอธิบาย
ใช้ chrome.devtools.inspectedWindow API เพื่อโต้ตอบกับหน้าต่างที่ตรวจสอบ: รับรหัสแท็บสำหรับหน้าที่ตรวจสอบ ประเมินโค้ดในบริบทของหน้าต่างที่ตรวจสอบ โหลดหน้าเว็บซ้ำ หรือรับรายการทรัพยากรภายในหน้าเว็บ
ดูสรุป API ของเครื่องมือสำหรับนักพัฒนาเว็บสำหรับข้อมูลเบื้องต้นทั่วไปเกี่ยวกับการใช้ API ของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
พร็อพเพอร์ตี้ tabId จะระบุตัวระบุแท็บที่คุณใช้กับการเรียก API ของ chrome.tabs.*
ได้ อย่างไรก็ตาม โปรดทราบว่าเราไม่ได้เปิดเผย chrome.tabs.* API ในหน้าส่วนขยายของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์เนื่องด้วยเหตุผลด้านความปลอดภัย คุณจะต้องส่งรหัสแท็บไปยังหน้าพื้นหลังและเรียกใช้ฟังก์ชัน chrome.tabs.* API จากที่นั่น
คุณอาจใช้reloadเพื่อโหลดหน้าเว็บที่ตรวจสอบซ้ำ นอกจากนี้ ผู้โทรยังระบุ การลบล้างสตริง User-Agent, สคริปต์ที่จะแทรกเมื่อโหลดหน้าเว็บ หรือ ตัวเลือกเพื่อบังคับให้โหลดทรัพยากรที่แคชไว้ซ้ำได้ด้วย
ใช้getResourcesการเรียกและเหตุการณ์ onResourceContent เพื่อรับรายการทรัพยากร
(เอกสาร สไตล์ชีต สคริปต์ รูปภาพ ฯลฯ) ภายในหน้าที่ตรวจสอบ เมธอด getContent และ
setContent ของคลาส Resource พร้อมกับเหตุการณ์ onResourceContentCommitted อาจ
ใช้เพื่อรองรับการแก้ไขเนื้อหาของทรัพยากร เช่น โดยโปรแกรมแก้ไขภายนอก
ไฟล์ Manifest
รันโค้ดในหน้าต่างที่ตรวจสอบ
เมธอด eval ช่วยให้ส่วนขยายเรียกใช้โค้ด JavaScript ในบริบทของหน้าเว็บที่ตรวจสอบได้ วิธีนี้มีประสิทธิภาพเมื่อใช้ในบริบทที่เหมาะสมและเป็นอันตรายเมื่อใช้
อย่างไม่เหมาะสม ใช้เมธอด tabs.executeScript เว้นแต่คุณต้องการฟังก์ชันการทำงานที่เฉพาะเจาะจง
ที่เมธอด eval มีให้
ความแตกต่างหลักระหว่างวิธี eval กับ tabs.executeScript มีดังนี้
- เมธอด
evalไม่ได้ใช้โลกที่แยกจากกันสำหรับโค้ดที่กำลังประเมิน ดังนั้นโค้ดจึงเข้าถึงสถานะ JavaScript ของหน้าต่างที่ตรวจสอบได้ ใช้วิธีนี้เมื่อต้องเข้าถึง สถานะ JavaScript ของหน้าที่ตรวจสอบ - บริบทการดำเนินการของโค้ดที่กำลังประเมินมี API คอนโซลของเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์
เช่น โค้ดอาจใช้
inspectและ$0 - โค้ดที่ประเมินแล้วอาจแสดงค่าที่ส่งไปยังการเรียกกลับของส่วนขยาย ค่าที่ส่งคืน ต้องเป็นออบเจ็กต์ JSON ที่ถูกต้อง (อาจมีเฉพาะประเภท JavaScript แบบดั้งเดิมและการอ้างอิงแบบไม่เป็นวัฏจักร ไปยังออบเจ็กต์ JSON อื่นๆ) โปรดระมัดระวังเป็นพิเศษขณะประมวลผลข้อมูลที่ได้รับจากหน้าเว็บที่ตรวจสอบ เนื่องจากบริบทการดำเนินการจะควบคุมโดยหน้าเว็บที่ตรวจสอบเป็นหลัก หน้าเว็บที่เป็นอันตรายอาจส่งผลต่อข้อมูลที่ส่งคืนไปยังส่วนขยาย
โปรดทราบว่าหน้าเว็บอาจมีบริบทการเรียกใช้ JavaScript ที่แตกต่างกันหลายรายการ แต่ละเฟรมจะมีบริบทของตัวเอง รวมถึงบริบทเพิ่มเติมสำหรับส่วนขยายแต่ละรายการที่มี Content Script ทำงานในเฟรมนั้น
โดยค่าเริ่มต้น eval จะดำเนินการในบริบทของเฟรมหลักของหน้าที่ตรวจสอบ
เมธอด eval จะรับอาร์กิวเมนต์ที่ 2 ที่ไม่บังคับ ซึ่งคุณใช้เพื่อระบุบริบทที่ประเมินโค้ดได้
ออบเจ็กต์options นี้อาจมีคีย์ต่อไปนี้อย่างน้อย 1 รายการ
frameURL- ใช้เพื่อระบุเฟรมอื่นนอกเหนือจากเฟรมหลักของหน้าที่ตรวจสอบ
contextSecurityOrigin- ใช้เพื่อเลือกบริบทภายในเฟรมที่ระบุตามต้นทางเว็บ
useContentScriptContext- หากเป็นจริง ให้เรียกใช้สคริปต์ในบริบทเดียวกับสคริปต์เนื้อหาของส่วนขยาย (เทียบเท่ากับการระบุต้นทางเว็บของส่วนขยายเองเป็นต้นทางความปลอดภัยของบริบท) ซึ่งใช้เพื่อ แลกเปลี่ยนข้อมูลกับ Content Script ได้
ตัวอย่าง
โค้ดต่อไปนี้จะตรวจสอบเวอร์ชันของ jQuery ที่หน้าเว็บที่ตรวจสอบใช้
chrome.devtools.inspectedWindow.eval(
"jQuery.fn.jquery",
function(result, isException) {
if (isException) {
console.log("the page is not using jQuery");
} else {
console.log("The page is using jQuery v" + result);
}
}
);
หากต้องการลองใช้ API นี้ ให้ติดตั้งตัวอย่าง API ของ DevTools จากที่เก็บ chrome-extension-samples
ประเภท
Resource
ทรัพยากรภายในหน้าที่ตรวจสอบ เช่น เอกสาร สคริปต์ หรือรูปภาพ
พร็อพเพอร์ตี้
-
URL
สตริง
URL ของทรัพยากร
-
getContent
เป็นโมฆะ
รับเนื้อหาของทรัพยากร
ฟังก์ชัน
getContentมีลักษณะดังนี้(callback: function) => {...}
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้(content: string, encoding: string) => void
-
content
สตริง
เนื้อหาของทรัพยากร (อาจมีการเข้ารหัส)
-
การเข้ารหัส
สตริง
ว่างเปล่าหากเนื้อหาไม่ได้เข้ารหัส หรือชื่อการเข้ารหัสในกรณีอื่นๆ ปัจจุบันรองรับเฉพาะ base64
-
-
-
setContent
เป็นโมฆะ
ตั้งค่าเนื้อหาของทรัพยากร
ฟังก์ชัน
setContentมีลักษณะดังนี้(content: string, commit: boolean, callback?: function) => {...}
-
content
สตริง
เนื้อหาใหม่ของทรัพยากร ขณะนี้รองรับเฉพาะแหล่งข้อมูลที่มีประเภทข้อความ
-
คอมมิต
บูลีน
เป็นจริงหากผู้ใช้แก้ไขทรัพยากรเสร็จแล้ว และควรบันทึกเนื้อหาใหม่ของทรัพยากร เป็นเท็จหากเป็นการเปลี่ยนแปลงเล็กน้อยที่ส่งระหว่างที่ผู้ใช้แก้ไขทรัพยากร
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callbackมีลักษณะดังนี้(error?: object) => void
-
ข้อผิดพลาด
ออบเจ็กต์ ไม่บังคับ
ตั้งค่าเป็น "ไม่กำหนด" หากตั้งค่าเนื้อหาของทรัพยากรสำเร็จ หรืออธิบายข้อผิดพลาดในกรณีอื่นๆ
-
-
พร็อพเพอร์ตี้
tabId
รหัสของแท็บที่กำลังตรวจสอบ รหัสนี้อาจใช้กับ chrome.tabs.* API
ประเภท
ตัวเลข
เมธอด
eval()
chrome.devtools.inspectedWindow.eval(
expression: string,
options?: object,
callback?: function,
): void
ประเมินนิพจน์ JavaScript ในบริบทของเฟรมหลักของหน้าที่ตรวจสอบ นิพจน์ต้องประเมินเป็นออบเจ็กต์ที่สอดคล้องกับ JSON ไม่เช่นนั้นระบบจะส่งข้อยกเว้น ฟังก์ชัน eval สามารถรายงานข้อผิดพลาดฝั่ง DevTools หรือข้อยกเว้น JavaScript ที่เกิดขึ้นระหว่างการประเมิน ไม่ว่าในกรณีใดก็ตาม พารามิเตอร์ result ของการเรียกกลับจะเป็น undefined ในกรณีที่เกิดข้อผิดพลาดฝั่ง DevTools พารามิเตอร์ isException จะไม่ใช่ค่าว่าง และมีค่า isError เป็นจริง และค่า code เป็นรหัสข้อผิดพลาด ในกรณีที่เกิดข้อผิดพลาด JavaScript ระบบจะตั้งค่า isException เป็น true และตั้งค่า value เป็นค่าสตริงของออบเจ็กต์ที่ส่ง
พารามิเตอร์
-
นิพจน์
สตริง
นิพจน์ที่จะประเมิน
-
ตัวเลือก
ออบเจ็กต์ ไม่บังคับ
พารามิเตอร์ options อาจมีตัวเลือกอย่างน้อย 1 รายการ
-
frameURL
สตริง ไม่บังคับ
หากระบุไว้ ระบบจะประเมินนิพจน์ใน iframe ที่มี URL ตรงกับ URL ที่ระบุ โดยค่าเริ่มต้น ระบบจะประเมินนิพจน์ในเฟรมบนสุดของหน้าที่ตรวจสอบ
-
scriptExecutionContext
สตริง ไม่บังคับ
Chrome 107 ขึ้นไปประเมินนิพจน์ในบริบทของ Content Script ของส่วนขยายที่ตรงกับต้นทางที่ระบุ หากระบุไว้ scriptExecutionContext จะลบล้างการตั้งค่า "จริง" ใน useContentScriptContext
-
useContentScriptContext
บูลีน ไม่บังคับ
ประเมินนิพจน์ในบริบทของสคริปต์เนื้อหาของส่วนขยายที่เรียก โดยมีเงื่อนไขว่าสคริปต์เนื้อหาได้แทรกลงในหน้าที่ตรวจสอบแล้ว หากไม่เป็นเช่นนั้น ระบบจะไม่ประเมินนิพจน์และจะเรียกใช้การเรียกกลับโดยตั้งค่าพารามิเตอร์ข้อยกเว้นเป็นออบเจ็กต์ที่มีฟิลด์
isErrorตั้งค่าเป็นจริง และฟิลด์codeตั้งค่าเป็นE_NOTFOUND
-
-
callback
ฟังก์ชัน ไม่บังคับ
พารามิเตอร์
callbackมีลักษณะดังนี้(result: object, exceptionInfo: object) => void
-
ผลลัพธ์
ออบเจ็กต์
ผลการประเมิน
-
exceptionInfo
ออบเจ็กต์
ออบเจ็กต์ที่ให้รายละเอียดหากเกิดข้อยกเว้นขณะประเมินนิพจน์
-
รหัส
สตริง
ตั้งค่าหากเกิดข้อผิดพลาดในฝั่ง DevTools ก่อนที่จะมีการประเมินนิพจน์
-
คำอธิบาย
สตริง
ตั้งค่าหากเกิดข้อผิดพลาดในฝั่ง DevTools ก่อนที่จะมีการประเมินนิพจน์
-
รายละเอียด
any[]
ตั้งค่าหากเกิดข้อผิดพลาดในฝั่ง DevTools ก่อนที่จะมีการประเมินนิพจน์ ซึ่งมีอาร์เรย์ของค่าที่อาจแทนที่ในสตริงคำอธิบายเพื่อให้ข้อมูลเพิ่มเติมเกี่ยวกับสาเหตุของข้อผิดพลาด
-
isError
บูลีน
ตั้งค่าหากเกิดข้อผิดพลาดในฝั่ง DevTools ก่อนที่จะมีการประเมินนิพจน์
-
isException
บูลีน
ตั้งค่าหากโค้ดที่ประเมินสร้างข้อยกเว้นที่ไม่ได้จัดการ
-
value
สตริง
ตั้งค่าหากโค้ดที่ประเมินสร้างข้อยกเว้นที่ไม่ได้จัดการ
-
-
getResources()
chrome.devtools.inspectedWindow.getResources(
callback: function,
): void
ดึงรายการทรัพยากรจากหน้าที่ตรวจสอบ
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้(resources: Resource[]) => void
-
แหล่งข้อมูลได้ที่
ทรัพยากรภายในหน้า
-
reload()
chrome.devtools.inspectedWindow.reload(
reloadOptions?: object,
): void
โหลดหน้าเว็บที่ตรวจสอบซ้ำ
พารามิเตอร์
-
reloadOptions
ออบเจ็กต์ ไม่บังคับ
-
ignoreCache
บูลีน ไม่บังคับ
เมื่อเป็นจริง ตัวโหลดจะข้ามแคชสำหรับทรัพยากรหน้าเว็บที่ตรวจสอบทั้งหมดซึ่งโหลดก่อนที่จะทริกเกอร์เหตุการณ์
loadซึ่งคล้ายกับการกด Ctrl+Shift+R ในหน้าต่างที่ตรวจสอบหรือภายในหน้าต่างเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ -
injectedScript
สตริง ไม่บังคับ
หากระบุไว้ สคริปต์จะได้รับการแทรกลงในทุกเฟรมของหน้าที่ตรวจสอบทันทีเมื่อโหลด ก่อนสคริปต์ใดๆ ของเฟรม ระบบจะไม่แทรกสคริปต์หลังจากการโหลดซ้ำในภายหลัง เช่น หากผู้ใช้กด Ctrl+R
-
userAgent
สตริง ไม่บังคับ
หากระบุ สตริงจะลบล้างค่าของ
User-Agentส่วนหัว HTTP ที่ส่งขณะโหลดทรัพยากรของหน้าเว็บที่ตรวจสอบ สตริงจะลบล้างค่าของพร็อพเพอร์ตี้navigator.userAgentที่แสดงผลไปยังสคริปต์ที่ทำงานภายในหน้าที่ตรวจสอบด้วย
-
กิจกรรม
onResourceAdded
chrome.devtools.inspectedWindow.onResourceAdded.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการเพิ่มทรัพยากรใหม่ลงในหน้าที่ตรวจสอบ
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้(resource: Resource) => void
-
แหล่งข้อมูล
-
onResourceContentCommitted
chrome.devtools.inspectedWindow.onResourceContentCommitted.addListener(
callback: function,
)
ทริกเกอร์เมื่อมีการคอมมิตรีวิชันใหม่ของทรัพยากร (เช่น ผู้ใช้บันทึกทรัพยากรเวอร์ชันที่แก้ไขแล้วในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์)
พารามิเตอร์
-
callback
ฟังก์ชัน
พารามิเตอร์
callbackมีลักษณะดังนี้(resource: Resource, content: string) => void
-
แหล่งข้อมูล
-
content
สตริง
-