chrome.alarms

תיאור

אפשר להשתמש ב-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

    בוליאני

    בהמתנה

    האם האזעקה צריכה להישמע גם אחרי סגירה והפעלה מחדש של הדפדפן.

  • scheduledTime

    number

    השעה שבה ההתראה הזו אמורה לפעול, באלפיות השנייה שעברו מאז תקופת האפוקה (לדוגמה, Date.now() + n). מטעמי ביצועים, יכול להיות שההתראה תופעל באיחור של פרק זמן כלשהו.

AlarmCreateInfo

מאפיינים

  • delayInMinutes

    מספר אופציונלי

    משך הזמן בדקות שאחריו צריך להפעיל את האירוע onAlarm.

  • periodInMinutes

    מספר אופציונלי

    אם המדיניות מוגדרת, האירוע onAlarm יופעל כל periodInMinutes דקות אחרי האירוע הראשוני שצוין על ידי when או delayInMinutes. אם המדיניות לא מוגדרת, האזעקה תופעל רק פעם אחת.

  • persistAcrossSessions

    ‫boolean אופציונלי

    בהמתנה

    האם ההתראה צריכה להישמר בין סשנים (הפעלה מחדש של הדפדפן). ב-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 שמושלם כשההתראה נוצרת.

get()

chrome.alarms.get(
  name?: string,
)
: Promise<Alarm | undefined>

אחזור פרטים על ההתראה שצוינה.

פרמטרים

  • שם

    מחרוזת אופציונלי

    שם ההתראה שרוצים לאחזר. ברירת המחדל היא מחרוזת ריקה.

החזרות

  • ‫Promise<Alarm | undefined>

    Chrome 91 ואילך

getAll()

chrome.alarms.getAll(): Promise<Alarm[]>

מחזירה מערך של כל ההתראות.

החזרות

  • Promise<Alarm[]>

    Chrome 91 ואילך

אירועים

onAlarm

chrome.alarms.onAlarm.addListener(
  callback: function,
)

מופעל כשמגיע הזמן של התראה. שימושי לדפי אירועים.

פרמטרים

  • callback

    פונקציה

    הפרמטר callback נראה כך:

    (alarm: Alarm) => void