chrome.alarms

説明

chrome.alarms API を使用して、コードを定期的に実行するか、将来の指定した時間に実行するようにスケジュールします。

権限

alarms

chrome.alarms API を使用するには、マニフェスト"alarms" 権限を宣言します。

{   "name": "My extension",   ...   "permissions": [     "alarms"   ],   ... } 

コンセプトと使用方法

信頼性の高い動作を確保するには、API の動作を理解することが重要です。

デバイスのスリープ

デバイスがスリープ状態でも、アラームは動作し続けます。ただし、アラームでデバイスのスリープを解除することはできません。デバイスが復帰すると、設定したアラームが起動します。繰り返しアラームは、最大で 1 回だけ起動し、デバイスが起動した時点から指定された期間を使用して再スケジュールされます。アラームが最初に実行されるように設定されてから経過した時間は考慮されません。

永続性

アラームは通常、拡張機能が更新されるまで持続します。ただし、これは保証されておらず、ブラウザが再起動されるとアラームがクリアされる可能性があります。したがって、アラームが作成されたときにストレージに値を設定し、サービス ワーカーが起動するたびにその値が存在することを確認することを検討してください。次に例を示します。

const STORAGE_KEY = "user-preference-alarm-enabled";  async function checkAlarmState() {   const { alarmEnabled } = await chrome.storage.get(STORAGE_KEY);    if (alarmEnabled) {     const alarm = await chrome.alarms.get("my-alarm");      if (!alarm) {       await chrome.alarms.create({ periodInMinutes: 1 });     }   } }  checkAlarmState(); 

次の例は、アラームの使用方法とアラームへの応答方法を示しています。この API を試すには、chrome-extension-samples リポジトリから Alarm API のサンプルをインストールします。

アラームを設定する

次の例では、拡張機能のインストール時に Service Worker でアラームを設定します。

service-worker.js:

chrome.runtime.onInstalled.addListener(async ({ reason }) => {   if (reason !== 'install') {     return;   }    // Create an alarm so we have something to look at in the demo   await chrome.alarms.create('demo-default-alarm', {     delayInMinutes: 1,     periodInMinutes: 1   }); }); 

アラームに対応する

次の例では、アラームが鳴った名前に基づいてアクション ツールバー アイコンを設定します。

service-worker.js:

chrome.alarms.onAlarm.addListener((alarm) => {   chrome.action.setIcon({     path: getIconPath(alarm.name),   }); }); 

Alarm

プロパティ

  • name

    文字列

    このアラームの名前。

  • periodInMinutes

    number 省略可

    null でない場合、アラームは繰り返しアラームであり、periodInMinutes 分後に再びトリガーされます。

  • scheduledTime

    数値

    このアラームが発出されるようにスケジュールされた時刻(エポックからの経過時間(ミリ秒単位)、例: Date.now() + n)。パフォーマンス上の理由から、アラームはこれを超えて任意の時間遅延される可能性があります。

AlarmCreateInfo

プロパティ

  • delayInMinutes

    number 省略可

    onAlarm イベントを発生させるまでの時間(分単位)。

  • periodInMinutes

    number 省略可

    設定されている場合、onAlarm イベントは when または delayInMinutes で指定された最初のイベントの periodInMinutes 分ごとに発生します。設定しない場合、アラームは 1 回だけ発動します。

  • when

    number 省略可

    アラームを起動する日時をエポックからの経過時間(ミリ秒単位)で指定します(例: Date.now() + n)。

メソッド

clear()

chrome.alarms.clear(
  name?: string,
)
: Promise<boolean>

指定された名前のアラームをクリアします。

パラメータ

  • name

    文字列 省略可

    クリアするアラームの名前。デフォルトは空の文字列です。

戻り値

  • 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 秒に 1 回までに制限していますが、さらに遅延させることもあります。つまり、delayInMinutes または periodInMinutes0.5 より小さい値に設定しても、その値は適用されず、警告が発生します。when は警告なしで「現在」から 30 秒未満に設定できますが、実際にはアラームは 30 秒以上トリガーされません。

アプリや拡張機能をデバッグできるように、アンパックしたアプリや拡張機能では、アラームの起動回数に制限はありません。

パラメータ

  • name

    文字列 省略可

    このアラームを識別するための名前(省略可)。デフォルトは空の文字列です。

  • alarmInfo

    アラームを起動するタイミングを説明します。開始時刻は when または delayInMinutes のいずれかで指定する必要があります(両方は不可)。periodInMinutes が設定されている場合、アラームは最初のイベントの後に periodInMinutes 分ごとに繰り返されます。繰り返しアラームに whendelayInMinutes のどちらも設定されていない場合、periodInMinutesdelayInMinutes のデフォルトとして使用されます。

戻り値

  • Promise<void>

    Chrome 111+

get()

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

指定されたアラームの詳細を取得します。

パラメータ

  • name

    文字列 省略可

    取得するアラームの名前。デフォルトは空の文字列です。

戻り値

  • 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