رویدادهای کارگران خدماتی

کارگران خدمات برنامه افزودنی از رویدادهای استاندارد سرویس کارگر و بسیاری از رویدادها در APIهای برنامه افزودنی پشتیبانی می کنند. این بخش موارد موجود را شرح می دهد و نکاتی را برای استفاده از آنها ارائه می دهد.

رویدادهای برنامه افزودنی را اعلام کنید

کنترل‌کننده‌های رویداد در کارکنان خدمات باید در محدوده جهانی اعلام شوند، به این معنی که باید در سطح بالای اسکریپت باشند و در داخل توابع قرار نگیرند. این تضمین می‌کند که آنها به صورت همزمان در اجرای اسکریپت اولیه ثبت می‌شوند، که Chrome را قادر می‌سازد تا رویدادها را به محض شروع به کار به سرویس‌دهنده ارسال کند. مثلا:

توصیه نمی شود
chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
  chrome.action.onClicked.addListener(handleActionClick);
});

بهتر
chrome.action.onClicked.addListener(handleActionClick);

chrome.storage.local.get(["badgeText"], ({ badgeText }) => {
  chrome.action.setBadgeText({ text: badgeText });
});

رویدادهای رایج

کارگران خدمات افزونه از رویدادها در APIهای خاص پشتیبانی می کنند. در ادامه چند مورد رایج شرح داده شده است. توجه داشته باشید که برخی از این APIها برای استفاده به مجوز نیاز دارند و برخی دیگر ممکن است رویدادها، روش‌ها یا ویژگی‌هایی داشته باشند که در همه نسخه‌های Chrome در دسترس نیستند. برای جزئیات، به مستندات API مرتبط، به ویژه رویدادها، روش‌ها یا ویژگی‌هایی که می‌خواهید استفاده کنید، مراجعه کنید.

chrome.action
در پاسخ به تعامل کاربر با نماد نوار ابزار برنامه افزودنی شما، خواه این عملکرد برای یک صفحه خاص (برگه) باشد یا برای کل برنامه افزودنی، فعال می شود.
chrome.management
رویدادهای مربوط به نصب، حذف، فعال کردن و غیرفعال کردن برنامه‌های افزودنی را ارائه می‌دهد.
chrome.notifications
رویدادهای مربوط به تعامل کاربر با اعلان‌های سیستم ایجاد شده توسط برنامه افزودنی را ارائه می‌کند.
chrome.permissions
زمانی را نشان می دهد که مجوزهای برنامه افزودنی توسط کاربر اعطا یا لغو می شوند.
chrome.runtime
رویدادهای مربوط به چرخه عمر برنامه افزودنی، پیام‌های ارسال شده از قسمت‌های دیگر برنامه افزودنی و اعلان یک برنامه افزودنی موجود یا به‌روزرسانی Chrome را ارائه می‌کند.
chrome.storage.onChanged
هر زمان که هر شی StorageArea پاک شود یا زمانی که مقدار یک کلید تغییر یا تنظیم شود فعال می شود. توجه داشته باشید که هر نمونه StorageArea رویداد onChanged خود را دارد.
chrome.webNavigation
اطلاعاتی در مورد وضعیت درخواست های ناوبری در پرواز ارائه می دهد.

فیلترها

برای محدود کردن رویدادها به موارد خاص یا حذف تماس‌های رویداد غیرضروری، از APIهایی استفاده کنید که از فیلترهای رویداد پشتیبانی می‌کنند. به عنوان مثال، یک برنامه افزودنی را در نظر بگیرید که برای رویداد tabs.onUpdated گوش می دهد تا تشخیص دهد که کاربر به یک وب سایت خاص پیمایش می کند. این رویداد در هر ناوبری در هر برگه فراخوانی می شود. در عوض، از webNavigation.onCompleted با یک فیلتر استفاده کنید. مثلا:

const filter = {
  url: [
    {
      urlMatches: 'https://www.google.com/',
    },
  ],
};

chrome.webNavigation.onCompleted.addListener(() => {
  console.info("The user has loaded my favorite website!");
}, filter);

رویدادهای کارگر خدمات وب

کارگران خدمات توسعه بیشتر از رویدادهای چرخه حیات که در جاهای دیگر توضیح داده شده است پشتیبانی می کنند.

ServiceWorkerGlobal.fetch

هنگامی که هر چیزی از بسته افزونه بازیابی می شود یا زمانی که fetch() و XMLHttpRequest() از یک افزونه یا اسکریپت بازشو فراخوانی می شوند، فعال می شود. (تماس‌های اسکریپت‌های محتوا توسط سرویس‌گر fetch رهگیری نمی‌شوند.) در موارد دوم، باید URL صفحاتی را که می‌خواهید واکشی کنید به کلید "host_permissions" در manifest.json اضافه کنید.

ServiceWorkerGlobal.message

ارسال پیام کارگر سرویس علاوه بر ارسال پیام افزودنی در دسترس است، اما این دو سیستم با هم قابل اجرا نیستند. این بدان معناست که پیام‌هایی که با استفاده از sendMessage() ارسال می‌شوند (که از چندین API برنامه‌های افزودنی موجود است) توسط گردانندگان پیام‌های سرویس‌کار رهگیری نمی‌شوند. به همین ترتیب، پیام‌هایی که با استفاده از postMessage() ارسال می‌شوند توسط کنترل‌کننده‌های پیام افزودنی رهگیری نمی‌شوند. هر دو نوع کنترل کننده پیام - یعنی هم ServiceWorkerGlobal.message و هم chrome.runtime.onMessage - در کارکنان خدمات توسعه پشتیبانی می شوند.

شما باید پیام‌های افزودنی را ترجیح دهید مگر اینکه دلیل خاصی برای استفاده از پیام‌رسانی کارگر داشته باشید.