אירועים ב-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);

אירועי worker של שירותי אינטרנט

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

ServiceWorkerGlobal.fetch

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

ServiceWorkerGlobal.message

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

מומלץ להשתמש בהודעות של תוספים, אלא אם יש לכם סיבה ספציפית לשימוש בהודעות של שירותי עבודה.