קובצי שירות (service worker) של תוספים תומכים גם באירועים של קובץ שירות רגיל וגם באירועים רבים בממשקי ה-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 }); });
אירועים נפוצים
קובצי שירות (service worker) של תוספים תומכים באירועים בממשקי 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
כלי שירות (service worker) של תוספים תומכים במקרים נוספים, מעבר לאירועים במחזור החיים שמתוארים במקום אחר.
ServiceWorkerGlobal.fetch
מופעל כשמשהו מאוחזר מחבילת התוסף, או כשמפעילים את fetch()
ואת XMLHttpRequest()
מתוסף או מסקריפט קופץ. (קריאות מסקריפטים של תוכן לא מיוטות על ידי ה-handler של fetch
של קובץ השירות). במקרים האחרונים צריך להוסיף למפתח "host_permissions"
ב-manifest.json
את כתובות ה-URL של הדפים שרוצים לאחזר.
ServiceWorkerGlobal.message
העברת הודעות של קובץ שירות (service worker) זמינה בנוסף להעברת הודעות של התוסף, אבל שתי המערכות לא פועלות במקביל. המשמעות היא שהודעות שנשלחות באמצעות sendMessage()
(שזמין מכמה ממשקי API של תוספים) לא מיורטות על ידי רכיבי ה-handler של ההודעות של Service Worker. באופן דומה, הודעות שנשלחות באמצעות postMessage()
לא מיורטות על ידי רכיבי handler של הודעות של תוספים. ברכיבי handler של תוספים יש תמיכה בשני הסוגים של רכיבי handler של הודעות (כלומר, ServiceWorkerGlobal.message
וגם chrome.runtime.onMessage
).
עדיף להשתמש בהודעות לגבי תוספים, אלא אם יש סיבה ספציפית לשימוש בהודעות של קובץ השירות (service worker).