שירותי עובדים של תוספים תומכים באירועים של שירותי עובדים רגילים וגם באירועים רבים בממשקי ה-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).