الوصف
تعمل واجهة برمجة التطبيقات chrome.debugger كبديل لبروتوكول تصحيح الأخطاء عن بُعد في Chrome. يمكنك استخدام chrome.debugger للربط بعلامة تبويب واحدة أو أكثر لتنظيم تفاعل الشبكة وتصحيح أخطاء JavaScript وتغيير DOM وCSS والمزيد. استخدِم السمة Debuggee tabId لاستهداف علامات التبويب باستخدام sendCommand وتوجيه الأحداث حسب tabId من عمليات الاستدعاء onEvent.
الأذونات
debuggerيجب الإفصاح عن إذن "debugger" في بيان الإضافة لاستخدام واجهة برمجة التطبيقات هذه.
{
"name": "My extension",
...
"permissions": [
"debugger",
],
...
}
قيود سياسات المؤسسة
على أجهزة المؤسسات، يمكن لبعض السياسات أن تمنع الإضافات من إرفاق برنامج تصحيح الأخطاء باستخدام نموذج "الكل أو لا شيء" في وقت الإرفاق
(browser.debugger.attach()):
- قيود المضيف: إذا كانت سياسة المؤسسة
ExtensionSettingsتضبط المضيفين المحظورين (runtime_blocked_hosts) لإضافة معيّنة، يتم حظرbrowser.debugger.attach()على جميع الأهداف مع ظهور الخطأ"Host access is restricted by policy."(حتى إذا كانت المصادر الفردية فيruntime_allowed_hosts). - سياسات لقطات الشاشة ومنع فقدان البيانات: إذا كانت سياسة المؤسسة
DisableScreenshotsتوقف التقاط لقطات الشاشة أو كانت قواعد منع فقدان البيانات (DLP) تنطبق على الهدف، يتعذّر تنفيذbrowser.debugger.attach()مع ظهور الخطأ"Screenshot capture is restricted by policy.".
المفاهيم والاستخدام
بعد الربط، تتيح لك واجهة برمجة التطبيقات browser.debugger إرسال أوامر بروتوكول أدوات مطوّري البرامج في Chrome (CDP) إلى هدف معيّن. إنّ شرح CDP بالتفصيل خارج نطاق هذه المستندات، ولمزيد من المعلومات حول CDP، يمكنك الاطّلاع على مستندات CDP الرسمية.
الأهداف
تمثّل الأهداف العناصر التي يتم تصحيح أخطائها، وقد تشمل علامة تبويب أو إطار iframe أو مشغّل خدمات. يتم تحديد كل هدف من خلال معرّف فريد عالمي (UUID) ويكون له نوع مرتبط به (مثل iframe وshared_worker والمزيد).
ضمن الهدف، قد تكون هناك سياقات تنفيذ متعددة، على سبيل المثال، لا تحصل إطارات iframe الخاصة بالعملية نفسها على هدف فريد، ولكن يتم تمثيلها بدلاً من ذلك كسياقات مختلفة يمكن الوصول إليها من هدف واحد.
النطاقات المحظورة
لأسباب تتعلق بالأمان، لا تتيح واجهة برمجة التطبيقات browser.debugger الوصول إلى جميع نطاقات بروتوكول أدوات مطوّري البرامج في Chrome. النطاقات المتاحة هي: أدوات تسهيل الاستخدام وعمليات التدقيق وCacheStorage ووحدة التحكّم وCSS وقاعدة البيانات وبرنامج تصحيح الأخطاء وDOM وDOMDebugger وDOMSnapshot والمحاكاة والجلب والإدخال/الإخراج والإدخال وأداة الفحص والسجلّ والشبكة والتراكب والصفحة والأداء ووقت التشغيل ومساحة التخزين والهدف والتتبّع وWebAudio وWebAuthn.
العمل باستخدام الإطارات
لا يوجد تعيين واحد لواحد من الإطارات إلى الأهداف. ضمن علامة تبويب واحدة، قد تتشارك عدة إطارات من العملية نفسها الهدف نفسه ولكنها تستخدم سياق تنفيذ مختلفًا. من ناحية أخرى، قد يتم إنشاء هدف جديد لإطار iframe خارج العملية.
لإرفاق جميع الإطارات، عليك التعامل مع كل نوع من الإطارات بشكل منفصل:
استمِع إلى الحدث
Runtime.executionContextCreatedلتحديد سياقات التنفيذ الجديدة المرتبطة بإطارات العملية نفسها.اتّبِع الخطوات للربط بالأهداف ذات الصلة لتحديد الإطارات خارج العملية.
الربط بالأهداف ذات الصلة
بعد الاتصال بهدف، قد تحتاج إلى الاتصال بأهداف أخرى ذات صلة، بما في ذلك الإطارات الفرعية خارج العملية أو العمال المرتبطين.
اعتبارًا من الإصدار 125 من Chrome، تتيح واجهة برمجة التطبيقات browser.debugger الجلسات المسطّحة. يتيح لك ذلك إضافة أهداف أخرى كأهداف فرعية إلى جلسة تصحيح الأخطاء الرئيسية ومراسلتها بدون الحاجة إلى إجراء مكالمة أخرى إلى browser.debugger.attach. بدلاً من ذلك،
يمكنك إضافة سمة sessionId عند استدعاء browser.debugger.sendCommand
لتحديد الجهاز المستهدف التابع الذي تريد إرسال أمر إليه.
لإرفاق الإطارات الفرعية خارج العملية تلقائيًا، أضِف أولاً مستمعًا للحدث Target.attachedToTarget:
browser.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 browser.debugger.sendCommand(session, "Runtime.enable");
}
});
بعد ذلك، فعِّل ميزة الإرفاق التلقائي من خلال إرسال الأمر Target.setAutoAttach مع ضبط الخيار flatten على true:
await browser.debugger.sendCommand({ tabId }, "Target.setAutoAttach", {
autoAttach: true,
waitForDebuggerOnStart: false,
flatten: true,
filter: [{ type: "iframe", exclude: false }]
});
لا يتم إرفاق الإطارات تلقائيًا إلا بالإطارات التي يعرفها الهدف، والتي تقتصر على
الإطارات الفرعية المباشرة لإطار مرتبط به. على سبيل المثال،
مع التسلسل الهرمي للإطار A -> B -> C (حيث تكون جميعها متعدّدة المصادر)، فإنّ استدعاء
Target.setAutoAttach للهدف المرتبط بـ A سيؤدي إلى
إرفاق الجلسة أيضًا بـ B. ومع ذلك، لا يتم تكرار هذه العملية، لذا يجب أيضًا استدعاء Target.setAutoAttach لكي يربط B الجلسة بـ C.
أمثلة
لتجربة واجهة برمجة التطبيقات هذه، يمكنك تثبيت مثال واجهة برمجة تطبيقات مصحِّح الأخطاء من مستودع chrome-extension-samples.
الأنواع
Debuggee
معرّف برنامج تصحيح الأخطاء يجب تحديد tabId أو extensionId أو targetId
الخصائص
-
extensionId
string اختياري
رقم تعريف الإضافة التي تريد تصحيح أخطائها لا يمكن الربط بصفحة خلفية للإضافة إلا عند استخدام مفتاح سطر الأوامر
--silent-debugger-extension-api. -
tabId
number اختيارية
رقم تعريف علامة التبويب التي تريد تصحيح أخطائها
-
targetId
string اختياري
المعرّف المبهم لهدف تصحيح الأخطاء
DebuggerSession
معرّف جلسة تصحيح الأخطاء يجب تحديد أحد العناصر التالية: tabId أو extensionId أو targetId. بالإضافة إلى ذلك، يمكن تقديم sessionId اختياري. إذا تم تحديد sessionId للوسيطات المُرسَلة من onEvent، يعني ذلك أنّ الحدث وارد من جلسة بروتوكول فرعية ضمن جلسة تصحيح الأخطاء الجذرية. إذا تم تحديد sessionId عند تمريره إلى sendCommand، يستهدف جلسة بروتوكول فرعية ضمن جلسة تصحيح الأخطاء الجذرية.
الخصائص
-
extensionId
string اختياري
رقم تعريف الإضافة التي تريد تصحيح أخطائها لا يمكن الربط بصفحة خلفية للإضافة إلا عند استخدام مفتاح سطر الأوامر
--silent-debugger-extension-api. -
sessionId
string اختياري
المعرّف غير الشفاف لجلسة بروتوكول أدوات مطوّري البرامج في Chrome يحدّد جلسة فرعية ضمن الجلسة الجذر التي يحدّدها tabId أو extensionId أو targetId.
-
tabId
number اختيارية
رقم تعريف علامة التبويب التي تريد تصحيح أخطائها
-
targetId
string اختياري
المعرّف المبهم لهدف تصحيح الأخطاء
DetachReason
سبب إنهاء الاتصال
Enum
"target_closed"
"canceled_by_user"
TargetInfo
معلومات عن هدف تصحيح الأخطاء
الخصائص
-
متصل
قيمة منطقية
تكون القيمة "صحيح" إذا كان مصحّح الأخطاء مرفقًا.
-
extensionId
string اختياري
معرّف الإضافة، يتم تحديده إذا كان النوع = 'background_page'.
-
faviconUrl
string اختياري
عنوان URL المستهدَف للرمز المفضّل
-
id
سلسلة
رقم تعريف الهدف
-
tabId
number اختيارية
معرّف علامة التبويب، ويتم تحديده إذا كان النوع == 'page'.
-
title
سلسلة
عنوان الصفحة المستهدفة
-
النوع
نوع الاستهداف:
-
url
سلسلة
عنوان URL المستهدف
TargetInfoType
نوع الاستهداف:
Enum
"page"
"background_page"
"worker"
"other"
الطُرق
attach()
browser.debugger.attach(
target: Debuggee,
requiredVersion: string,
): Promise<void>
لإرفاق مصحِّح الأخطاء بالهدف المحدّد
المعلمات
-
target
هدف تصحيح الأخطاء الذي تريد إرفاقه.
-
requiredVersion
سلسلة
إصدار بروتوكول تصحيح الأخطاء المطلوب ("0.1"). يمكن إرفاق برنامج تصحيح الأخطاء فقط برقم إصدار رئيسي مطابق ورقم إصدار ثانوي أكبر أو مساوٍ. يمكنك الحصول على قائمة بإصدارات البروتوكول هنا.
المرتجعات
-
وعد<فراغ>
الإصدار 96 من Chrome والإصدارات الأحدث browser.* منذ الإصدار 148 من Chromeيتم حلّ المشكلة بعد نجاح عملية الإرفاق أو تعذُّرها. يتم تنفيذ الوعد بدون قيمة. إذا تعذّر الإرفاق، سيتم رفض الوعد.
detach()
browser.debugger.detach(
target: Debuggee,
): Promise<void>
لفصل مصحِّح الأخطاء عن الهدف المحدّد
المعلمات
-
target
هدف تصحيح الأخطاء الذي تريد فصله
المرتجعات
-
وعد<فراغ>
الإصدار 96 من Chrome والإصدارات الأحدث browser.* منذ الإصدار 148 من Chromeيتم حلّ المشكلة بعد نجاح عملية الفصل أو تعذُّرها. يتم تنفيذ الوعد بدون قيمة. إذا تعذّر الفصل، سيتم رفض الوعد.
getTargets()
browser.debugger.getTargets(): Promise<TargetInfo[]>
تعرض هذه الطريقة قائمة بأهداف تصحيح الأخطاء المتاحة.
المرتجعات
-
Promise<TargetInfo[]>
الإصدار 96 من Chrome والإصدارات الأحدث browser.* منذ الإصدار 148 من Chrome
sendCommand()
browser.debugger.sendCommand(
target: DebuggerSession,
method: string,
commandParams?: object,
): Promise<object | undefined>
يتم إرسال الأمر المحدّد إلى هدف تصحيح الأخطاء.
المعلمات
-
target
هدف تصحيح الأخطاء الذي تريد إرسال الأمر إليه
-
method
سلسلة
اسم الطريقة يجب أن تكون إحدى الطرق المحدّدة في بروتوكول تصحيح الأخطاء عن بُعد.
-
commandParams
object اختياري
عنصر JSON يتضمّن مَعلمات الطلب يجب أن يتوافق هذا العنصر مع مخطّط مَعلمات تصحيح الأخطاء عن بُعد للطريقة المحدّدة.
المرتجعات
-
Promise<object | undefined>
الإصدار 96 من Chrome والإصدارات الأحدث browser.* منذ الإصدار 148 من Chromeنص الرد في حال حدوث خطأ أثناء نشر الرسالة، سيتم رفض الوعد.
الفعاليات
onDetach
browser.debugger.onDetach.addListener(
callback: function,
)
يتم تفعيل هذا الحدث عندما ينهي المتصفّح جلسة تصحيح الأخطاء لعلامة التبويب. يحدث ذلك عند إغلاق علامة التبويب أو عند استدعاء "أدوات مطوّري البرامج في Chrome" لعلامة التبويب المرفقة.
المعلمات
-
callback
دالة
تظهر المَعلمة
callbackعلى النحو التالي:(source: Debuggee, reason: DetachReason) => void
-
المصدر
-
reason
-
onEvent
browser.debugger.onEvent.addListener(
callback: function,
)
يتم تشغيله عند تصحيح أخطاء حدث قياس مشاكل الاستهداف.
المعلمات
-
callback
دالة
تظهر المَعلمة
callbackعلى النحو التالي:(source: DebuggerSession, method: string, params?: object) => void
-
المصدر
-
method
سلسلة
-
params
object اختياري
-