אירועים ב-Service Workers

שירותי עובדים של תוספים תומכים באירועים של שירותי עובדים רגילים וגם באירועים רבים בממשקי ה-API של התוספים. בקטע הזה נסביר מה זמין ומה היתרונות של השימוש בכלי האלה.

הכרזה על אירועי תוספים

צריך להצהיר על גורמים מטפלים באירועים ב-service workers בהיקף הגלובלי, כלומר הם צריכים להיות ברמה העליונה של הסקריפט ולא להיות מוטמעים בתוך פונקציות. כך ניתן להבטיח שהם רשומים באופן סינכרוני בעת ביצוע סקריפט ראשוני, מה שמאפשר ל-Chrome לשלוח אירועים ל-Service Worker ברגע שהוא מופעל. לדוגמה:

לא מומלץ
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);

אירועים של Web Service Worker

שירותי העובדים של התוספים תומכים באירועים נוספים מעבר לאירועי מחזור החיים שמתוארים במקומות אחרים.

ServiceWorkerGlobal.fetch

הפונקציה מופעלת כשמשהו מאוחזר מחבילת התוסף או כשמתבצעת קריאה ל-fetch() ול-XMLHttpRequest() מתוסף או מסקריפט של חלון קופץ. (קריאות מסקריפטים של תוכן לא נחסמות על ידי הטיפול fetch של ה-service worker). במקרים האחרונים, תצטרכו להוסיף את כתובות ה-URL של הדפים שרוצים לאחזר למפתח "host_permissions" בקובץ manifest.json.

ServiceWorkerGlobal.message

העברת הודעות של שירותי עבודה זמינה בנוסף להעברת הודעות של תוספים, אבל שתי המערכות לא ניתנות לפעולה הדדית. כלומר, הודעות שנשלחות באמצעות sendMessage() (שזמין מכמה ממשקי API של תוספים) לא נחסמות על ידי שירותי עיבוד ההודעות של שירותי העבודה. באופן דומה, הודעות שנשלחות באמצעות postMessage() לא נחסמות על ידי בוררי הודעות של תוספים. שני סוגי פונקציות עיבוד ההודעות – כלומר ServiceWorkerGlobal.message ו-chrome.runtime.onMessage – נתמכים בעובדים של שירותי התוספים.

עדיף להשתמש בהעברת הודעות עם תוספים, אלא אם יש לכם סיבה ספציפית להשתמש בהודעות של קובצי שירות (service worker).