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