คำอธิบาย
chrome.debugger
API ทำหน้าที่เป็นการรับส่งข้อมูลสำรองสำหรับโปรโตคอลการแก้ไขข้อบกพร่องระยะไกลของ Chrome ใช้ chrome.debugger
เพื่อแนบกับแท็บอย่างน้อย 1 แท็บเพื่อกำหนดทิศทางของการโต้ตอบเครือข่าย, แก้ไขข้อบกพร่อง JavaScript, เปลี่ยนแปลง DOM และ CSS และอื่นๆ ใช้พร็อพเพอร์ตี้ Debuggee
tabId
เพื่อกำหนดเป้าหมายแท็บที่มี sendCommand
และกำหนดเส้นทางเหตุการณ์ภายในวันที่ tabId
จาก Callback onEvent
สิทธิ์
debugger
คุณต้องประกาศสิทธิ์ "debugger"
ในไฟล์ Manifest ของส่วนขยายเพื่อใช้ API นี้
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
แนวคิดและการใช้งาน
เมื่อแนบแล้ว API ของ chrome.debugger
จะช่วยให้คุณส่งโปรโตคอลเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ได้
(CDP) ไปยังเป้าหมายที่ระบุ การอธิบาย CDP โดยละเอียดอยู่นอกเหนือขอบเขต
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับ CDP โปรดไปที่
เอกสารของ CDP อย่างเป็นทางการ
เป้าหมาย
เป้าหมายแสดงถึงสิ่งที่กำลังแก้ไขข้อบกพร่องอยู่ ซึ่งอาจรวมถึงแท็บ
iframe หรือผู้ปฏิบัติงาน แต่ละเป้าหมายจะได้รับการระบุโดย UUID และเชื่อมโยง
ประเภท (เช่น iframe
, shared_worker
และอื่นๆ)
ภายในเป้าหมายหนึ่ง อาจมีบริบทการดำเนินการหลายอย่าง เช่น iframe ของกระบวนการไม่ได้รับเป้าหมายที่ไม่ซ้ำ แต่จะแสดงเป็น บริบทต่างๆ ที่เข้าถึงได้จากเป้าหมายเดียว
โดเมนที่ถูกจำกัด
เพื่อความปลอดภัย chrome.debugger
API จะไม่ให้สิทธิ์เข้าถึงเครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ทั้งหมด
Protocol Domains โดเมนที่ใช้ได้มีดังนี้ การช่วยเหลือพิเศษ
Audits, CacheStorage, Console,
CSS, ฐานข้อมูล, โปรแกรมแก้ไขข้อบกพร่อง, DOM,
DOMDebugger, DOMSnapshot
การเลียนแบบ, ดึงข้อมูล, IO, อินพุต,
เครื่องมือตรวจสอบ, บันทึก, เครือข่าย, โฆษณาซ้อนทับ,
หน้า, ประสิทธิภาพ, เครื่องมือสร้างโปรไฟล์,
รันไทม์, พื้นที่เก็บข้อมูล, เป้าหมาย, การติดตาม,
WebAudio และ WebAuthn
ใช้งานเฟรม
ไม่มีการแมปเฟรมแบบ 1 ต่อ 1 ไปยังเป้าหมาย ภายในแท็บเดียว เฟรมกระบวนการเดียวกันหลายเฟรมอาจมีเป้าหมายเดียวกัน แต่ใช้ บริบทการดำเนินการ ในทางกลับกัน เป้าหมายใหม่อาจเป็น สำหรับ iframe นอกกระบวนการ
หากต้องการแนบกับเฟรมทั้งหมด คุณต้องจัดการเฟรมแต่ละประเภทแยกกัน ดังนี้
ฟังเหตุการณ์
Runtime.executionContextCreated
เพื่อระบุใหม่ บริบทการดำเนินการที่เชื่อมโยงกับเฟรมกระบวนการเดียวกันทำตามขั้นตอนเพื่อแนบเป้าหมายที่เกี่ยวข้องกับ ระบุเฟรมนอกกระบวนการ
แนบกับเป้าหมายที่เกี่ยวข้อง
หลังจากเชื่อมต่อกับเป้าหมายแล้ว คุณอาจต้องการเชื่อมต่อกับเป้าหมายที่เกี่ยวข้องเพิ่มเติม ซึ่งรวมถึงเฟรมย่อยนอกกระบวนการหรือผู้ปฏิบัติงานที่เกี่ยวข้อง
ตั้งแต่ Chrome 125 เป็นต้นไป API ของ chrome.debugger
จะรองรับเซสชันแบบคงที่ ช่วงเวลานี้
ช่วยให้คุณเพิ่มเป้าหมายเพิ่มเติมในฐานะผู้เผยแพร่โฆษณาย่อยในเซสชันโปรแกรมแก้ไขข้อบกพร่องหลัก และ
ส่งข้อความถึงผู้ใช้ได้โดยไม่ต้องโทรหา chrome.debugger.attach
อีก แต่
คุณสามารถเพิ่มพร็อพเพอร์ตี้ sessionId
เมื่อโทรหา chrome.debugger.sendCommand
ไปยัง
ระบุเป้าหมายย่อยที่คุณต้องการส่งคำสั่ง
หากต้องการแนบกับเฟรมย่อยที่อยู่นอกกระบวนการโดยอัตโนมัติ ให้เพิ่ม Listener สำหรับ
เหตุการณ์ Target.attachedToTarget
:
chrome.debugger.onEvent.addListener((source, method, params) => {
if (method === "Target.attachedToTarget") {
// `source` identifies the parent session, but we need to construct a new
// identifier for the child session
const session = { ...source, sessionId: params.sessionId };
// Call any needed CDP commands for the child session
await chrome.debugger.sendCommand(session, "Runtime.enable");
}
});
จากนั้นเปิดใช้การแนบอัตโนมัติโดยการส่งคำสั่ง Target.setAutoAttach
พร้อม
ตั้งค่าตัวเลือก flatten
เป็น true
await chrome.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
ตัวอย่าง
หากต้องการลองใช้ API นี้ ให้ติดตั้งตัวอย่าง API ของโปรแกรมแก้ไขข้อบกพร่องจาก chrome-extension-samples ที่เก็บได้
ประเภท
Debuggee
ตัวระบุ Debuggee ต้องระบุ TabId, รหัสส่วนขยาย หรือ targetId
พร็อพเพอร์ตี้
-
extensionId
string ไม่บังคับ
รหัสของส่วนขยายที่คุณต้องการแก้ไขข้อบกพร่อง การแนบกับหน้าพื้นหลังของส่วนขยายจะทำได้ก็ต่อเมื่อใช้สวิตช์บรรทัดคำสั่ง
--silent-debugger-extension-api
-
tabId
หมายเลข ไม่บังคับ
รหัสของแท็บที่คุณต้องการแก้ไขข้อบกพร่อง
-
targetId
string ไม่บังคับ
รหัสที่คลุมเครือของเป้าหมายการแก้ไขข้อบกพร่อง
DebuggerSession
ตัวระบุเซสชันของโปรแกรมแก้ไขข้อบกพร่อง ต้องระบุ TabId, extensionsId หรือ targetId อย่างน้อย 1 รายการ นอกจากนี้ คุณยังระบุ sessionId ได้อีกด้วย (ไม่บังคับ) หากระบุ sessionId สำหรับอาร์กิวเมนต์ที่ส่งจาก onEvent
หมายความว่าเหตุการณ์นั้นมาจากเซสชันโปรโตคอลย่อยภายในเซสชันการแก้ไขข้อบกพร่องระดับรูท หากระบุ sessionId เมื่อส่งไปยัง sendCommand
ระบบจะกำหนดเป้าหมายเป็นเซสชันโปรโตคอลย่อยภายในเซสชัน Debuggee ระดับรูท
พร็อพเพอร์ตี้
-
extensionId
string ไม่บังคับ
รหัสของส่วนขยายที่คุณต้องการแก้ไขข้อบกพร่อง การแนบกับหน้าพื้นหลังของส่วนขยายจะทำได้ก็ต่อเมื่อใช้สวิตช์บรรทัดคำสั่ง
--silent-debugger-extension-api
-
sessionId
string ไม่บังคับ
รหัสที่คลุมเครือของเซสชัน Chrome DevTools Protocol ระบุเซสชันย่อยภายในเซสชันรูทที่ระบุโดย TabId, extensionsId หรือรหัส targetId
-
tabId
หมายเลข ไม่บังคับ
รหัสของแท็บที่คุณต้องการแก้ไขข้อบกพร่อง
-
targetId
string ไม่บังคับ
รหัสที่คลุมเครือของเป้าหมายการแก้ไขข้อบกพร่อง
DetachReason
เหตุผลในการสิ้นสุดการเชื่อมต่อ
ค่าแจกแจง
"target_closed"
"canceled_by_user"
TargetInfo
แก้ไขข้อบกพร่องของข้อมูลเป้าหมาย
พร็อพเพอร์ตี้
-
เชื่อมต่อแล้ว
boolean
เป็นจริงหากมีการแนบโปรแกรมแก้ไขข้อบกพร่องไว้อยู่แล้ว
-
extensionId
string ไม่บังคับ
รหัสส่วนขยายที่กำหนดหากประเภท = 'background_page'
-
faviconUrl
string ไม่บังคับ
URL ไอคอน Fav เป้าหมาย
-
id
สตริง
รหัสเป้าหมาย
-
tabId
หมายเลข ไม่บังคับ
รหัสแท็บ กำหนดหากประเภท == 'page'
-
title
สตริง
ชื่อหน้าเป้าหมาย
-
ประเภท
ประเภทเป้าหมาย
-
URL
สตริง
URL เป้าหมาย
TargetInfoType
ประเภทเป้าหมาย
ค่าแจกแจง
"page"
"background_page"
"ผู้ปฏิบัติงาน"
"อื่นๆ"
เมธอด
attach()
chrome.debugger.attach(
target: Debuggee,
requiredVersion: string,
callback?: function,
)
แนบโปรแกรมแก้ไขข้อบกพร่องกับเป้าหมายที่ระบุ
พารามิเตอร์
-
เป้าหมาย
การแก้ไขข้อบกพร่องเป้าหมายที่คุณต้องการแนบ
-
requiredVersion
สตริง
ต้องมีเวอร์ชันโปรโตคอลการแก้ไขข้อบกพร่อง ("0.1") ผู้ใช้จะแนบกับโปรแกรมแก้ไขข้อบกพร่องที่มีเวอร์ชันหลักตรงกันกับเวอร์ชันย่อยที่สูงกว่าหรือเท่ากันได้ ดูรายการเวอร์ชันโปรโตคอลได้ที่นี่
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
คำมั่นสัญญา<โมฆะ>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
detach()
chrome.debugger.detach(
target: Debuggee,
callback?: function,
)
ปลดโปรแกรมแก้ไขข้อบกพร่องออกจากเป้าหมายที่ระบุ
พารามิเตอร์
-
เป้าหมาย
การแก้ไขข้อบกพร่องเป้าหมายที่คุณต้องการปลดออก
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้() => void
การคืนสินค้า
-
คำมั่นสัญญา<โมฆะ>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
getTargets()
chrome.debugger.getTargets(
callback?: function,
)
แสดงผลรายการเป้าหมายการแก้ไขข้อบกพร่องที่ใช้ได้
พารามิเตอร์
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(result: TargetInfo[]) => void
-
ผลลัพธ์
อาร์เรย์ของออบเจ็กต์ TargetInfo ที่ตรงกับเป้าหมายการแก้ไขข้อบกพร่องที่มีอยู่
-
การคืนสินค้า
-
Promise<TargetInfo[]>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
sendCommand()
chrome.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
callback?: function,
)
ส่งคำสั่งไปยังเป้าหมายการแก้ไขข้อบกพร่อง
พารามิเตอร์
-
เป้าหมาย
การแก้ไขข้อบกพร่องเป้าหมายที่คุณต้องการส่งคำสั่ง
-
method
สตริง
ชื่อเมธอด ควรเป็นวิธีการหนึ่งที่กำหนดโดยโปรโตคอลการแก้ไขข้อบกพร่องระยะไกล
-
commandParams
ออบเจ็กต์ไม่บังคับ
ออบเจ็กต์ JSON ที่มีพารามิเตอร์คำขอ ออบเจ็กต์นี้ต้องสอดคล้องกับสคีมาพารามิเตอร์การแก้ไขข้อบกพร่องระยะไกลสำหรับเมธอดที่ระบุ
-
Callback
ไม่บังคับ
พารามิเตอร์
callback
มีลักษณะดังนี้(result?: object) => void
-
ผลลัพธ์
ออบเจ็กต์ไม่บังคับ
ออบเจ็กต์ JSON ที่มีการตอบกลับ โครงสร้างของการตอบกลับจะแตกต่างกันไปขึ้นอยู่กับชื่อเมธอด และกำหนดโดย "returns" ของคำอธิบายคำสั่งในโปรโตคอลการแก้ไขข้อบกพร่องระยะไกล
-
การคืนสินค้า
-
Promise<object | ไม่ระบุ>
Chrome 96 ขึ้นไปรองรับคำสัญญาในไฟล์ Manifest V3 ขึ้นไป แต่จะมี Callback สำหรับ ความเข้ากันได้แบบย้อนหลัง คุณไม่สามารถใช้ทั้ง 2 อย่างในการเรียกใช้ฟังก์ชันเดียวกันได้ จะมีการแก้ไขด้วยประเภทเดียวกันที่ส่งไปยัง Callback
กิจกรรม
onDetach
chrome.debugger.onDetach.addListener(
callback: function,
)
เริ่มทำงานเมื่อเบราว์เซอร์สิ้นสุดเซสชันการแก้ไขข้อบกพร่องของแท็บ ซึ่งจะเกิดขึ้นเมื่อปิดแท็บหรือเรียกใช้เครื่องมือสำหรับนักพัฒนาเว็บใน Chrome ในแท็บที่แนบมา
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(source: Debuggee, reason: DetachReason) => void
-
source
-
สาเหตุ
-
onEvent
chrome.debugger.onEvent.addListener(
callback: function,
)
เริ่มทำงานทุกครั้งที่แก้ไขข้อบกพร่องในเหตุการณ์การวัดคุมปัญหาเป้าหมาย
พารามิเตอร์
-
Callback
ฟังก์ชัน
พารามิเตอร์
callback
มีลักษณะดังนี้(source: DebuggerSession, method: string, params?: object) => void
-
source
-
method
สตริง
-
พารามิเตอร์
ออบเจ็กต์ไม่บังคับ
-