browser.events

الوصف

يحتوي مساحة الاسم chrome.events على أنواع شائعة تستخدمها واجهات برمجة التطبيقات لإرسال الأحداث لإعلامك عند حدوث شيء مهم.

المفاهيم والاستخدام

Event هو عنصر يتيح لك تلقّي إشعارات عند حدوث أمر مثير للاهتمام. في ما يلي مثال على استخدام الحدث browser.alarms.onAlarm لتلقّي إشعار كلما انقضى وقت التنبيه:

browser.alarms.onAlarm.addListener((alarm) => {
  appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});

كما يوضّح المثال، يمكنك التسجيل لتلقّي الإشعارات باستخدام addListener(). يكون وسيط addListener() دائمًا عبارة عن دالة تحدّدها للتعامل مع الحدث، ولكن تعتمد مَعلمات الدالة على الحدث الذي تتعامل معه. من خلال الاطّلاع على المستندات الخاصة بالدالة alarms.onAlarm، يمكنك ملاحظة أنّ الدالة تتضمّن مَعلمة واحدة، وهي كائن alarms.Alarm يتضمّن تفاصيل حول المنبّه المنقضي.

أمثلة على واجهات برمجة التطبيقات التي تستخدم الأحداث: alarms وi18n وidentity وruntime. معظم واجهات برمجة التطبيقات في Chrome تفعل ذلك.

معالجات الأحداث الوصفية

توفّر معالجات الأحداث التعريفية وسيلة لتحديد القواعد التي تتألف من شروط وإجراءات تعريفية. يتم تقييم الشروط في المتصفّح بدلاً من محرّك JavaScript، ما يقلّل من وقت الاستجابة ويسمح بتحقيق كفاءة عالية جدًا.

تُستخدَم معالجات الأحداث التعريفية مثلاً في Declarative Content API. توضّح هذه الصفحة المفاهيم الأساسية لجميع معالجات الأحداث التعريفية.

القواعد

تتألف أبسط قاعدة ممكنة من شرط واحد أو أكثر وإجراء واحد أو أكثر:

const rule = {
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

في حال استيفاء أيّ من الشروط، يتم تنفيذ جميع الإجراءات.

بالإضافة إلى الشروط والإجراءات، يمكنك منح كل قاعدة معرّفًا يسهّل إلغاء تسجيل القواعد التي تم تسجيلها سابقًا، كما يمكنك منحها أولوية لتحديد الأسبقيات بين القواعد. لا يتم أخذ الأولويات في الاعتبار إلا إذا كانت القواعد تتعارض مع بعضها أو يجب تنفيذها بترتيب معيّن. يتم تنفيذ الإجراءات بترتيب تنازلي حسب أولوية قواعدها.

const rule = {
  id: "my rule",  // optional, will be generated if not set.
  priority: 100,  // optional, defaults to 100.
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

عناصر الحدث

قد تتوافق عناصر الأحداث مع القواعد. لا تستدعي عناصر الأحداث هذه دالّة رد الاتصال عند وقوع الأحداث، بل تختبر ما إذا كانت أي قاعدة مسجّلة تتضمّن شرطًا واحدًا على الأقل تم استيفاؤه، وتنفّذ الإجراءات المرتبطة بهذه القاعدة. تحتوي عناصر الأحداث المتوافقة مع واجهة برمجة التطبيقات التعريفية على ثلاث طرق ذات صلة، وهي: events.Event.addRules() وevents.Event.removeRules() وevents.Event.getRules().

إضافة قواعد

لإضافة قواعد، استدعِ الدالة addRules() الخاصة بعنصر الحدث. تتلقّى هذه الدالة مصفوفة من مثيلات القواعد كمعلَمة أولى، ودالة رد اتصال يتم استدعاؤها عند اكتمال العملية.

const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});

في حال تم إدراج القواعد بنجاح، تحتوي المَعلمة details على مصفوفة من القواعد المُدرَجة التي تظهر بالترتيب نفسه كما في rule_list الذي تم تمريره، حيث تم ملء المَعلمتَين الاختياريتَين id وpriority بالقيم التي تم إنشاؤها. إذا كانت أي قاعدة غير صالحة، مثلاً لأنّها تتضمّن شرطًا أو إجراءً غير صالحَين، لن تتم إضافة أي من القواعد وسيتم ضبط المتغيّر runtime.lastError عند استدعاء دالّة رد الاتصال. يجب أن تحتوي كل قاعدة في rule_list على معرّف فريد لم يسبق أن استخدمته قاعدة أخرى أو معرّف فارغ.

إزالة القواعد

لإزالة القواعد، استخدِم الدالة removeRules(). تقبل هذه الطريقة مصفوفة اختيارية من معرّفات القواعد كمعلَمة أولى ودالة رد اتصال كمعلَمة ثانية.

const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});

إذا كانت rule_ids مصفوفة من المعرّفات، تتم إزالة جميع القواعد التي تتضمّن معرّفات مُدرَجة في المصفوفة. إذا كانت rule_ids تعرض معرّفًا غير معروف، سيتم تجاهل هذا المعرّف بدون إشعار. إذا كانت قيمة rule_ids هي undefined، ستتم إزالة جميع القواعد المسجّلة لهذه الإضافة. يتم استدعاء الدالة callback() عندما تتم إزالة القواعد.

استرداد القواعد

لاسترداد قائمة بالقواعد المسجّلة، استخدِم الدالة getRules(). يقبل هذا الإجراء صفيفًا اختياريًا من معرّفات القواعد يتضمّن الدلالات نفسها التي يتضمّنها removeRules()، بالإضافة إلى دالة ردّ الاتصال.

const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});

تشير المَعلمة details التي تم تمريرها إلى الدالة callback() إلى مصفوفة من القواعد تتضمّن مَعلمات اختيارية تم ملؤها.

الأداء

لتحقيق أفضل أداء، عليك مراعاة الإرشادات التالية.

تسجيل القواعد وإلغاء تسجيلها بشكل مجمّع بعد كل عملية تسجيل أو إلغاء تسجيل، يحتاج Chrome إلى تعديل بنى البيانات الداخلية. هذا التعديل عملية مكلفة.

بدلاً من
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1]);
browser.declarativeWebRequest.onRequest.addRules([rule2]);
تفضيل
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

يُفضّل استخدام مطابقة السلسلة الفرعية على التعبيرات العادية في events.UrlFilter. تكون المطابقة المستندة إلى السلسلة الفرعية سريعة للغاية.

بدلاً من
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {urlMatches: "example.com/[^?]*foo" }
});
تفضيل
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {hostSuffix: "example.com", pathContains: "foo"}
});

إذا كانت هناك العديد من القواعد التي تتشارك الإجراءات نفسها، ادمِج القواعد في قاعدة واحدة. تفعّل القواعد إجراءاتها بمجرد استيفاء شرط واحد. يؤدي ذلك إلى تسريع عملية المطابقة وتقليل استهلاك الذاكرة لمجموعات الإجراءات المكرّرة.

بدلاً من
const condition1 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule1 = { conditions: [condition1],
                actions: [new browser.declarativeWebRequest.CancelRequest()]
              };
const rule2 = { conditions: [condition2],
                actions: [new browser.declarativeWebRequest.CancelRequest()]
              };
browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
تفضيل
const condition1 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule = { conditions: [condition1, condition2],
              actions: [new browser.declarativeWebRequest.CancelRequest()]
             };
browser.declarativeWebRequest.onRequest.addRules([rule]);

الأحداث التي تمّت فلترتها

الأحداث التي تمّت فلترتها هي آلية تتيح لأدوات معالجة الأحداث تحديد مجموعة فرعية من الأحداث التي تهمّها. لن يتم استدعاء أداة معالجة تستخدم فلترًا للأحداث التي لا تستوفي معايير الفلتر، ما يجعل رمز المعالجة أكثر تعريفًا وفعالية. لا يلزم تنشيط عامل الخدمة للتعامل مع الأحداث التي لا تهمه.

تهدف الأحداث التي تمّت فلترتها إلى السماح بالانتقال من رمز الفلترة اليدوية.

بدلاً من
browser.webNavigation.onCommitted.addListener((event) => {
  if (hasHostSuffix(event.url, 'google.com') ||
      hasHostSuffix(event.url, 'google.com.au')) {
    // ...
  }
});
تفضيل
browser.webNavigation.onCommitted.addListener((event) => {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

تتيح الأحداث استخدام فلاتر معيّنة ذات صلة بالحدث. سيتم إدراج قائمة الفلاتر التي يتيحها حدث معيّن في مستندات هذا الحدث ضمن قسم "الفلاتر".

عند مطابقة عناوين URL (كما في المثال أعلاه)، تتيح فلاتر الأحداث إمكانات مطابقة عناوين URL نفسها التي يمكن التعبير عنها باستخدام events.UrlFilter، باستثناء مطابقة المخطط والمنفذ.

الأنواع

Event

عنصر يتيح إضافة أدوات معالجة الأحداث وإزالتها لحدث Chrome.

الخصائص

  • addListener

    باطل

    تسجّل هذه السمة عملية رد اتصال لأداة معالجة الأحداث في حدث معيّن.

    تبدو الدالة addListener على النحو التالي:

    (callback: H) => {...}

    • callback

      H

      يتم استدعاؤه عند وقوع حدث. تعتمد مَعلمات هذه الدالة على نوع الحدث.

  • addRules

    باطل

    تسجّل هذه السمة القواعد للتعامل مع الأحداث.

    تبدو الدالة addRules على النحو التالي:

    (rules: Rule<anyany>[], callback?: function) => {...}

    • القواعد

      Rule<anyany>[]

      القواعد المطلوب تسجيلها. ولا تحلّ هذه القواعد محلّ القواعد المسجّلة سابقًا.

    • callback

      الدالة اختيارية

      تظهر المَعلمة callback على النحو التالي:

      (rules: Rule<anyany>[]) => void

      • القواعد

        Rule<anyany>[]

        القواعد التي تم تسجيلها، مع ملء المَعلمات الاختيارية بالقيم

  • getRules

    باطل

    تعرض هذه الطريقة القواعد المسجّلة حاليًا.

    تبدو الدالة getRules على النحو التالي:

    (ruleIdentifiers?: string[], callback: function) => {...}

    • ruleIdentifiers

      string[] اختياري

      في حال تمرير مصفوفة، لن يتم عرض سوى القواعد التي تحتوي على معرّفات مضمّنة في هذه المصفوفة.

    • callback

      دالة

      تظهر المَعلمة callback على النحو التالي:

      (rules: Rule<anyany>[]) => void

      • القواعد

        Rule<anyany>[]

        القواعد التي تم تسجيلها، مع ملء المَعلمات الاختيارية بالقيم

  • hasListener

    باطل

    تبدو الدالة hasListener على النحو التالي:

    (callback: H) => {...}

    • callback

      H

      أداة معالجة الحدث التي سيتم اختبار حالة تسجيلها.

    • returns

      قيمة منطقية

      تكون القيمة "صحيح" إذا تم تسجيل callback في الحدث.

  • hasListeners

    باطل

    تبدو الدالة hasListeners على النحو التالي:

    () => {...}

    • returns

      قيمة منطقية

      تكون القيمة صحيحة إذا تم تسجيل أي أدوات معالجة أحداث للحدث.

  • removeListener

    باطل

    يلغي تسجيل عملية ردّ الاتصال الخاصة بمتتبِّع الأحداث من حدث معيّن.

    تبدو الدالة removeListener على النحو التالي:

    (callback: H) => {...}

    • callback

      H

      أداة معالجة الحدث التي سيتم إلغاء تسجيلها

  • removeRules

    باطل

    لإلغاء تسجيل القواعد المسجّلة حاليًا

    تبدو الدالة removeRules على النحو التالي:

    (ruleIdentifiers?: string[], callback?: function) => {...}

    • ruleIdentifiers

      string[] اختياري

      في حال تمرير مصفوفة، لن يتم إلغاء تسجيل سوى القواعد التي تحتوي على معرّفات مضمّنة في هذه المصفوفة.

    • callback

      الدالة اختيارية

      تظهر المَعلمة callback على النحو التالي:

      () => void

Rule

وصف لقاعدة تعريفية للتعامل مع الأحداث

الخصائص

  • الإجراءات

    any[]

    قائمة بالإجراءات التي يتم تشغيلها في حال استيفاء أحد الشروط

  • الحالات الطبية

    any[]

    قائمة الشروط التي يمكن أن تؤدي إلى تفعيل الإجراءات

  • id

    سلسلة اختيارية

    معرّف اختياري يتيح الرجوع إلى هذه القاعدة.

  • الحملة

    number اختياري

    الأولوية الاختيارية لهذه القاعدة القيمة التلقائية هي 100.

  • الإشارات

    string[] اختياري

    يمكن استخدام العلامات لإضافة تعليقات توضيحية إلى القواعد وتنفيذ عمليات على مجموعات من القواعد.

UrlFilter

تتم فلترة عناوين URL حسب معايير مختلفة. اطّلِع على فلترة الأحداث. جميع المعايير حساسة لحالة الأحرف.

الخصائص

  • cidrBlocks

    string[] اختياري

    Chrome 123 والإصدارات الأحدث

    تحدث مطابقة إذا كان جزء المضيف من عنوان URL هو عنوان IP وتم تضمينه في أي من حظر CIDR المحدّد في المصفوفة.

  • hostContains

    سلسلة اختيارية

    تتم المطابقة إذا كان اسم المضيف لعنوان URL يحتوي على سلسلة محددة. لاختبار ما إذا كان أحد مكونات اسم المضيف يتضمّن البادئة "foo"، استخدِم hostContains: '.foo'. يتطابق ذلك مع "www.foobar.com" و"foo.com"، لأنّه تتم إضافة نقطة ضمنية في بداية اسم المضيف. وبالمثل، يمكن استخدام hostContains للمطابقة مع لاحقة المكوّن ("foo.") وللمطابقة التامة مع المكوّنات (".foo."). يجب إجراء المطابقة التامة والمطابقة باستخدام اللاحقة للمكوّنات الأخيرة بشكل منفصل باستخدام hostSuffix، لأنّه لا تتم إضافة نقطة ضمنية في نهاية اسم المضيف.

  • hostEquals

    سلسلة اختيارية

    تتم المطابقة إذا كان اسم المضيف لعنوان URL يساوي سلسلة محددة.

  • hostPrefix

    سلسلة اختيارية

    تتم المطابقة إذا كان اسم المضيف لعنوان URL يبدأ بسلسلة محددة.

  • hostSuffix

    سلسلة اختيارية

    تتم المطابقة إذا كان اسم المضيف لعنوان URL ينتهي بسلسلة محدّدة.

  • originAndPathMatches

    سلسلة اختيارية

    تحدث مطابقة إذا كان عنوان URL بدون جزء طلب البحث ومعرّف الجزء يطابق تعبيرًا عاديًا محدّدًا. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي. تستخدم التعبيرات العادية بنية RE2.

  • pathContains

    سلسلة اختيارية

    تحدث المطابقة إذا كان قسم المسار في عنوان URL يحتوي على سلسلة محددة.

  • pathEquals

    سلسلة اختيارية

    تتم المطابقة إذا كان جزء المسار من عنوان URL يساوي سلسلة محددة.

  • pathPrefix

    سلسلة اختيارية

    تتم المطابقة إذا كانت شريحة المسار في عنوان URL تبدأ بسلسلة محددة.

  • pathSuffix

    سلسلة اختيارية

    تتم المطابقة إذا انتهى جزء المسار من عنوان URL بسلسلة محدّدة.

  • ports

    (number | number[])[] اختيارية

    تحدث مطابقة إذا كان منفذ عنوان URL مضمّنًا في أي من قوائم المنافذ المحدّدة. على سبيل المثال، يطابق [80, 443, [1000, 1200]] جميع الطلبات على المنفذ 80 و443 وفي النطاق 1000-1200.

  • queryContains

    سلسلة اختيارية

    تتم المطابقة إذا كان جزء طلب البحث في عنوان URL يحتوي على سلسلة محددة.

  • queryEquals

    سلسلة اختيارية

    تتم المطابقة إذا كان جزء طلب البحث من عنوان URL يساوي سلسلة محددة.

  • queryPrefix

    سلسلة اختيارية

    تتم المطابقة إذا كان جزء طلب البحث من عنوان URL يبدأ بسلسلة محددة.

  • querySuffix

    سلسلة اختيارية

    تتم المطابقة إذا انتهى جزء طلب البحث من عنوان URL بسلسلة معيّنة.

  • المخططات

    string[] اختياري

    تتم المطابقة إذا كان مخطط عنوان URL يساوي أيًا من المخططات المحددة في المصفوفة.

  • urlContains

    سلسلة اختيارية

    تحدث مطابقة إذا كان عنوان URL (بدون معرّف الجزء) يحتوي على سلسلة محددة. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي.

  • urlEquals

    سلسلة اختيارية

    تتم المطابقة إذا كان عنوان URL (بدون معرّف الجزء) يساوي سلسلة محددة. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي.

  • urlMatches

    سلسلة اختيارية

    تتم المطابقة إذا كان عنوان URL (بدون معرّف الجزء) يطابق تعبيرًا عاديًا محدّدًا. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي. تستخدم التعبيرات العادية بنية RE2.

  • urlPrefix

    سلسلة اختيارية

    تحدث مطابقة إذا كان عنوان URL (بدون معرّف الجزء) يبدأ بسلسلة محددة. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي.

  • urlSuffix

    سلسلة اختيارية

    تتم المطابقة إذا كان عنوان URL (بدون معرّف الجزء) ينتهي بسلسلة محددة. تتم إزالة أرقام المنافذ من عنوان URL إذا كانت تتطابق مع رقم المنفذ التلقائي.