סקריפטים של Service Worker לתוספים תומכים באירועים של Service Worker רגיל ובאירועים רבים בממשקי ה-API של התוספים. בקטע הזה מוסבר מהן האפשרויות הזמינות ומוצגים טיפים לשימוש בהן.
הצהרה על אירועים של תוספים
צריך להצהיר על הגורמים המטפלים באירועים ב-Service Workers בהיקף הגלובלי, כלומר הם צריכים להיות ברמה העליונה של הסקריפט ולא להיות מוטמעים בתוך פונקציות. כך הם נרשמים באופן סינכרוני בהרצת הסקריפט הראשונית, ו-Chrome יכול לשלוח אירועים ל-service worker ברגע שהוא מתחיל לפעול. לדוגמה:
browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); browser.action.onClicked.addListener(handleActionClick); });
browser.action.onClicked.addListener(handleActionClick); browser.storage.local.get(["badgeText"], ({ badgeText }) => { browser.action.setBadgeText({ text: badgeText }); });
אירועים נפוצים
קובצי שירות של תוספים תומכים באירועים בממשקי API ספציפיים. בהמשך מפורטות כמה סיבות נפוצות לכך. חשוב לדעת: חלק מממשקי ה-API האלה דורשים הרשאות לשימוש, ובחלקם יש אירועים, שיטות או מאפיינים שלא זמינים בכל הגרסאות של Chrome. פרטים נוספים מופיעים במסמכי העזרה של ה-API שמקושרים כאן, במיוחד בנושא האירועים, השיטות או המאפיינים שבהם רוצים להשתמש.
browser.action- האירוע מופעל בתגובה לאינטראקציה של משתמש עם סמל סרגל הכלים של התוסף, בין אם הפעולה מתבצעת בדף ספציפי (כרטיסייה) או בתוסף כולו.
browser.management- מספק אירועים שקשורים להתקנה, להסרה, להפעלה ולהשבתה של תוספים.
browser.notifications- מספק אירועים שקשורים לאינטראקציה של המשתמש עם התראות מערכת שנוצרו על ידי התוסף.
browser.permissions- מציין מתי המשתמש העניק או ביטל את ההרשאות של התוסף.
browser.runtime- מספק אירועים שקשורים למחזור החיים של התוסף, הודעות שנשלחות מחלקים אחרים של התוסף והתראות על עדכון זמין של תוסף או של Chrome.
browser.storage.onChanged- האירוע מופעל בכל פעם שאובייקט
StorageAreaכלשהו מתרוקן, או כשמשנים או מגדירים את הערך של מפתח. שימו לב שלכל מופעStorageAreaיש אירועonChangedמשלו. browser.webNavigation- מספק מידע על הסטטוס של בקשות ניווט שנמצאות בתהליך.
מסננים
כדי להגביל את האירועים למקרה שימוש ספציפי או לבטל קריאות מיותרות לאירועים, צריך להשתמש בממשקי API שתומכים במסנני אירועים. לדוגמה, נניח שיש תוסף שמקשיב לאירוע tabs.onUpdated כדי לזהות מתי משתמש עובר לאתר ספציפי. האירוע הזה יופעל בכל ניווט בכל כרטיסייה. במקום זאת, אפשר להשתמש ב-webNavigation.onCompleted עם מסנן. לדוגמה:
const filter = {
url: [
{
urlMatches: 'https://www.google.com/',
},
],
};
browser.webNavigation.onCompleted.addListener(() => {
console.info("The user has loaded my favorite website!");
}, filter);
אירועים של service worker באתר
סקריפטים של Service Worker לתוספים תומכים ביותר אירועים של מחזור החיים שמתוארים במקום אחר.
ServiceWorkerGlobal.fetch
האירוע מופעל כשמאחזרים משהו מחבילת התוסף או כשקוראים לפונקציות fetch() ו-XMLHttpRequest() מסקריפט של תוסף או מחלון קופץ. (שיחות מסקריפטים של תוכן לא נחסמות על ידי handler של service worker fetch). במקרים האחרונים, צריך להוסיף את כתובות ה-URL של הדפים שרוצים לאחזר למפתח "host_permissions" ב-manifest.json.
ServiceWorkerGlobal.message
העברת הודעות של Service Worker זמינה בנוסף להעברת הודעות של תוספים, אבל שתי המערכות לא יכולות לפעול יחד. המשמעות היא שהודעות שנשלחות באמצעות sendMessage() (שזמין מכמה ממשקי API של תוספים) לא נחסמות על ידי מטפלי הודעות של Service Worker. באופן דומה, הודעות שנשלחות באמצעות postMessage() לא נחסמות על ידי רכיבי handler של הודעות תוסף. יש תמיכה בשני סוגי מטפלי ההודעות – כלומר גם ServiceWorkerGlobal.message וגם browser.runtime.onMessage – בסקריפט שירות של תוסף.
מומלץ להשתמש בהעברת הודעות בין תוספים, אלא אם יש לכם סיבה ספציפית להשתמש בהעברת הודעות של Service Worker.