תיאור
אפשר להשתמש ב-chrome.alarms API כדי לתזמן קוד להפעלה מעת לעת או בזמן מסוים בעתיד.
הרשאות
alarmsכדי להשתמש ב-chrome.alarms API, צריך להצהיר על ההרשאה "alarms" במניפסט:
{
"name": "My extension",
...
"permissions": [
"alarms"
],
...
}
מושגים ושימוש
כדי להבטיח התנהגות מהימנה, חשוב להבין את אופן הפעולה של ה-API.
מצב שינה במכשיר
השעונים המעוררים ממשיכים לפעול בזמן שהמכשיר במצב שינה. עם זאת, שעון מעורר לא יפעיל את המכשיר. כשהמכשיר יתעורר, כל ההתראות שלא התקבלו יופעלו. התראות חוזרות יופעלו פעם אחת לכל היותר, ואז יתוזמנו מחדש לפי התקופה שצוינה, החל מהרגע שבו המכשיר יתעורר. לא יובא בחשבון הזמן שכבר חלף מאז שההתראה הוגדרה להפעלה.
התמדה
אתם יכולים לשלוט בהתמדה של האזעקה בזמן היצירה באמצעות הדגל persistAcrossSessions. אפשר להגדיר את הערך ל-true (הערך נשמר עד שהתוסף מתעדכן) או ל-false (הערך נמחק אם התוסף נטען מחדש או אם הדפדפן מופעל מחדש, וגם בכל פעם שהתוסף מתעדכן).
דפדפנים אחרים וגרסאות קודמות של Chrome
המאפיין הזה לא נתמך בדפדפנים אחרים (בעיה) או בגרסאות של Chrome לפני Chrome 150, שבהן ההתנהגות יכולה להיות בלתי צפויה. לכן, מומלץ לוודא שקיימות התראות חשובות בכל פעם ש-service worker מופעל. לדוגמה:
async function checkAlarmState() {
const alarm = await chrome.alarms.get("my-alarm");
if (!alarm) {
await chrome.alarms.create("my-alarm", { periodInMinutes: 1 });
}
}
checkAlarmState();
אם האזעקה נוצרת באופן דינמי על סמך פעולת משתמש, כדאי לשמור במקום אחר את העובדה שהאזעקה נוצרה, כדי לדעת ליצור אותה מחדש אם צריך.
דוגמאות
בדוגמאות הבאות אפשר לראות איך משתמשים באזעקה ומגיבים לה. כדי לנסות את ה-API הזה, צריך להתקין את הדוגמה ל-Alarm API ממאגר chrome-extension-samples.
Set an alarm
בדוגמה הבאה מוגדר שעון מעורר ב-service worker כשמותקנת גרסה חדשה של התוסף:
service-worker.js:
chrome.runtime.onInstalled.addListener(async ({ reason }) => {
// Create an alarm so we have something to look at in the demo
await chrome.alarms.create('demo-default-alarm', {
delayInMinutes: 1,
periodInMinutes: 1,
persistAcrossSessions: true
});
});
איך מגיבים לאזעקה
בדוגמה הבאה, הסמל של סרגל הכלים של הפעולה מוגדר על סמך שם האזעקה שהופעלה.
service-worker.js:
chrome.alarms.onAlarm.addListener((alarm) => {
chrome.action.setIcon({
path: getIconPath(alarm.name),
});
});
סוגים
Alarm
מאפיינים
-
שם
מחרוזת
השם של ההתראה.
-
periodInMinutes
מספר אופציונלי
אם הערך לא null, השעון המעורר חוזר על עצמו ויצלצל שוב אחרי
periodInMinutesדקות. -
persistAcrossSessions
בוליאני
Chrome 150+האם האזעקה צריכה להישמע גם בסשנים אחרים (הפעלות מחדש של הדפדפן).
-
scheduledTime
number
השעה שבה ההתראה הזו אמורה לפעול, באלפיות השנייה שעברו מאז תקופת האפוקה (לדוגמה,
Date.now() + n). מטעמי ביצועים, יכול להיות שההתראה תופעל באיחור של פרק זמן כלשהו.
AlarmCreateInfo
מאפיינים
-
delayInMinutes
מספר אופציונלי
משך הזמן בדקות שאחריו צריך להפעיל את האירוע
onAlarm. -
שם
מחרוזת אופציונלי
בהמתנההשם של ההתראה.
-
periodInMinutes
מספר אופציונלי
אם המאפיין מוגדר, האירוע onAlarm יופעל כל
periodInMinutesדקות אחרי האירוע הראשוני שצוין על ידיwhenאוdelayInMinutes. אם לא מגדירים את האפשרות הזו, השעון המעורר יצלצל רק פעם אחת. -
persistAcrossSessions
boolean אופציונלי
Chrome 150+האם האזעקה צריכה להישמע גם בסשנים אחרים (הפעלות מחדש של הדפדפן). ב-Chrome, ערך ברירת המחדל של ההגדרה הזו הוא true כדי להתאים להתנהגות היסטורית, אבל מומלץ להגדיר אותה באופן מפורש כדי למקסם את התאימות בין דפדפנים.
-
מתי
מספר אופציונלי
השעה שבה ההתראה אמורה לפעול, באלפיות השנייה אחרי תקופת הזמן של מערכת (למשל
Date.now() + n).
Methods
clear()
chrome.alarms.clear(
name?: string,
): Promise<boolean>
מחיקה של השעון המעורר עם השם שצוין.
פרמטרים
-
שם
מחרוזת אופציונלי
השם של ההתראה שרוצים לבטל. ברירת המחדל היא מחרוזת ריקה.
החזרות
-
Promise<boolean>
Chrome 91 ואילך
clearAll()
chrome.alarms.clearAll(): Promise<boolean>
מחיקת כל השעונים המעוררים.
החזרות
-
Promise<boolean>
Chrome 91 ואילך
create()
chrome.alarms.create(
name?: string,
alarmInfo: AlarmCreateInfo,
): Promise<void>
יוצרת שעון מעורר. בסמוך לשעה או לשעות שצוינו על ידי alarmInfo, מופעל האירוע onAlarm. אם יש התראה אחרת עם אותו שם (או ללא שם אם לא צוין שם), היא תבוטל ותוחלף בהתראה הזו.
כדי להפחית את העומס על המחשב של המשתמש, Chrome מגביל את ההתראות לפעם אחת לכל היותר בכל 30 שניות, אבל יכול לעכב אותן גם יותר מזה. כלומר, הגדרת delayInMinutes או periodInMinutes לערך נמוך מ-0.5 לא תכובד ותגרום להצגת אזהרה. when אפשר להגדיר את השעה לזמן קצר מ-30 שניות אחרי השעה הנוכחית בלי לקבל אזהרה, אבל ההתראה לא תופעל בפועל לפני שיחלפו לפחות 30 שניות.
כדי לעזור לכם לנפות באגים באפליקציה או בתוסף, כשאתם טוענים אותם ללא דחיסה, אין הגבלה על התדירות שבה ההתראה יכולה לפעול.
פרמטרים
-
שם
מחרוזת אופציונלי
שם אופציונלי לזיהוי ההתראה. ברירת המחדל היא מחרוזת ריקה.
-
alarmInfo
מתאר מתי השעון המעורר צריך לפעול. צריך לציין את שעת ההתחלה באמצעות
whenאוdelayInMinutes(אבל לא את שניהם). אם מוגדרperiodInMinutes, ההתראה תחזור על עצמה כלperiodInMinutesדקות אחרי האירוע הראשוני. אם לא מוגדריםwhenאוdelayInMinutesלשעון מעורר חוזר,periodInMinutesמשמש כברירת מחדל לdelayInMinutes.
החזרות
-
Promise<void>
Chrome 111 ואילךהבטחה שמושלמת כשההתראה נוצרת.
פרמטרים
-
שם
מחרוזת אופציונלי
שם ההתראה שרוצים לאחזר. ברירת המחדל היא מחרוזת ריקה.
החזרות
-
Promise<Alarm | undefined>
Chrome 91 ואילך
החזרות
-
Promise<Alarm[]>
Chrome 91 ואילך