إدارة الأحداث باستخدام النصوص البرمجية في الخلفية

الإضافات هي برامج تستند إلى الأحداث ويتم استخدامها لتعديل تجربة تصفُّح Chrome أو تحسينها. الفعاليات هي عوامل تشغيل المتصفّح، مثل الانتقال إلى صفحة جديدة أو إزالة إشارة مرجعية أو إغلاق علامة تبويب. تراقب الإضافات هذه الأحداث في النص البرمجي للخلفية، ثم تتفاعل مع تعليمات محدّدة.

يتم تحميل صفحة الخلفية عند الحاجة إليها، ويتم إلغاء تحميلها عند عدم استخدامها. تتضمن بعض الأمثلة على تشمل الأحداث ما يلي:

  • يتم تثبيت الإضافة أو تحديثها أولاً إلى إصدار جديد.
  • كانت صفحة الخلفية تستمع إلى حدث، وتم إرسال الحدث.
  • نص برمجي للمحتوى أو إضافة أخرى يرسل رسالة.
  • عرض آخر في الإضافة، مثل نافذة منبثقة، يتّصل بـ runtime.getBackgroundPage

بعد تحميل الصفحة، ستظل صفحة الخلفية قيد التشغيل طالما يتم تنفيذ إجراء ما، مثل طلب واجهة برمجة تطبيقات Chrome أو إصدار طلب شبكة. بالإضافة إلى ذلك، ستعرض صفحة الخلفية لن يتم إلغاء التحميل إلى أن يتم إغلاق جميع طرق العرض المرئية وجميع منافذ الرسائل. لاحظ أن فتح طريقة عرض لا يتسبب في تحميل صفحة الحدث، وإنما يمنع إغلاقها بمجرد تحميلها فقط.

تظل النصوص البرمجية الفعالة في الخلفية دون توقف إلى أن يستمعوا إلى الحدث الذي يستمعون فيه إلى الحرائق تعليمات محددة، ثم إلغاء التحميل.

تسجيل النصوص البرمجية للخلفية

يتم تسجيل النصوص البرمجية للخلفية في البيان ضمن حقل "background". وهي مُدرجة في مصفوفة بعد المفتاح "scripts"، ويجب تحديد "persistent" على أنّها false.

{
  "name": "Awesome Test Extension",
  ...
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  ...
}

يمكن تسجيل نصوص برمجية متعددة في الخلفية للرمز البرمجي التقسيمي.

{
    "name": "Awesome Test Extension",
    ...
    "background": {
      "scripts": [
        "backgroundContextMenus.js",
        "backgroundOmniBox.js",
        "backgroundOauth.js"
      ],
      "persistent": false
    },
    ...
  }

وإذا كانت إحدى الإضافات تستخدم حاليًا صفحة خلفية دائمة، يُرجى الرجوع إلى مقالة نقل البيانات في الخلفية. دليل للحصول على تعليمات حول كيفية التبديل إلى نموذج غير دائم.

إعداد الإضافة

استمِع إلى الحدث runtime.onInstalled لإعداد إضافة عند التثبيت. استخدام هذه المسودة حدث لضبط حالة أو لعملية إعداد لمرة واحدة، مثل قائمة السياقات.

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

إعداد أدوات معالجة الحدث

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

يجب تسجيل أدوات معالجة الصوت بشكل متزامن من بداية الصفحة.

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({
    "id": "sampleContextMenu",
    "title": "Sample Context Menu",
    "contexts": ["selection"]
  });
});

// This will run when a bookmark is created.
chrome.bookmarks.onCreated.addListener(function() {
  // do something
});

لا تسجِّل المستمعين بشكل غير متزامن، حيث لن يتم تشغيلها بشكل صحيح.

chrome.runtime.onInstalled.addListener(function() {
  // ERROR! Events must be registered synchronously from the start of
  // the page.
  chrome.bookmarks.onCreated.addListener(function() {
    // do something
  });
});

يمكن للإضافات إزالة المستمعين من النصوص البرمجية في الخلفية من خلال الاتصال بالرقم removeListener. إذا كانت كل المنصّات عند إزالة أدوات معالجة الأحداث، فلن يحمّل Chrome بعد الآن النص البرمجي لخلفية الإضافة هذا الحدث.

chrome.runtime.onMessage.addListener(function(message, sender, reply) {
    chrome.runtime.onMessage.removeListener(event);
});

فلترة الأحداث

استخدام واجهات برمجة التطبيقات التي تتوافق مع فلاتر الأحداث لحظر المستمعين إلى الطلبات التي تهتم بها الإضافة عنه. إذا كانت إحدى الإضافات تستمع إلى الحدث tabs.onUpdated، جرِّب استخدام حدث webNavigation.onCompleted مع الفلاتر بدلاً من ذلك، لأنّه لا تتوافق مع واجهة برمجة تطبيقات علامات التبويب والفلاتر.

chrome.webNavigation.onCompleted.addListener(function() {
    alert("This is my favorite website!");
}, {url: [{urlMatches : 'https://www.google.com/'}]});

التفاعل مع المستمعين

وتتوفّر أدوات معالجة الحدث لتشغيل الوظيفة بعد تنشيط الحدث. للتفاعل مع حدث ما، ينبغي تنظيم التفاعل المطلوب داخل حدث المستمع.

chrome.runtime.onMessage.addListener(function(message, callback) {
  if (message.data == "setAlarm") {
    chrome.alarms.create({delayInMinutes: 5})
  } else if (message.data == "runLogic") {
    chrome.tabs.executeScript({file: 'logic.js'});
  } else if (message.data == "changeColor") {
    chrome.tabs.executeScript(
        {code: 'document.body.style.backgroundColor="orange"'});
  };
});

إلغاء تحميل النصوص البرمجية في الخلفية

يجب الاحتفاظ بالبيانات بشكل دوري حتى لا تفقد معلومات مهمة في حالة استخدام إحدى الإضافات الأعطال بدون تلقّي onSuspend. يمكنك استخدام واجهة برمجة تطبيقات storage للمساعدة في هذا الأمر.

chrome.storage.local.set({variable: variableInformation});

إذا كانت الإضافة تستخدم تمرير الرسائل، تأكَّد من إغلاق جميع المنافذ. سيبدأ النص البرمجي للخلفية لن يتم إلغاء التحميل حتى يتم إيقاف جميع منافذ الرسائل. جارٍ الاستماع إلى حدث runtime.Port.onDisconnect يقدم نظرة ثاقبة على وقت إغلاق المنافذ المفتوحة. يمكنك إغلاقها يدويًا باستخدام runtime.Port.disconnect

chrome.runtime.onMessage.addListener(function(message, callback) {
  if (message == 'hello') {
    sendResponse({greeting: 'welcome!'})
  } else if (message == 'goodbye') {
    chrome.runtime.Port.disconnect();
  }
});

يمكن رصد فترة بقاء النص البرمجي في الخلفية من خلال تتبُّع الحالات التي يتم فيها رصد إدخال للإضافة. وتختفي من إدارة المهام في Chrome.

ALT_TEXT_HERE

افتح "إدارة المهام" من خلال النقر على قائمة Chrome وتمرير مؤشر الماوس فوق المزيد من الأدوات واختيار "مهمة". المدير".

يتم إلغاء تحميل النصوص البرمجية في الخلفية من تلقاء نفسها بعد بضع ثوانٍ من عدم النشاط. إذا كانت هناك أي عملية تنظيف في اللحظة الأخيرة مطلوب، استمع إلى حدث runtime.onSuspend.

chrome.runtime.onSuspend.addListener(function() {
  console.log("Unloading.");
  chrome.browserAction.setBadgeText({text: ""});
});

مع ذلك، يجب تفضيل البيانات المستمرة على الاعتماد على runtime.onSuspend. cannot translate من خلال إخلاء مساحة التخزين التي تحتاجها، ولن تساعد في حال حدوث عطل.