browser.events

説明

chrome.events 名前空間には、イベントをディスパッチして、興味深いことが発生したときに通知する API で使用される共通の型が含まれています。

コンセプトと使用方法

Event は、関心事が発生したときに通知を受け取ることができるオブジェクトです。アラームが経過するたびに通知されるように browser.alarms.onAlarm イベントを使用する例を次に示します。

browser.alarms.onAlarm.addListener((alarm) => {
  appendToLog(`alarms.onAlarm -- name: ${alarm.name}, scheduledTime: ${alarm.scheduledTime}`);
});

この例に示すように、addListener() を使用して通知を登録します。addListener() の引数は常にイベントを処理するために定義する関数ですが、関数のパラメータは処理するイベントによって異なります。alarms.onAlarm のドキュメントを確認すると、この関数には 1 つのパラメータ(経過したアラームの詳細を含む alarms.Alarm オブジェクト)があることがわかります。

イベントを使用する API の例: alarmsi18nidentityruntime。ほとんどの Chrome API はそうではありません。

宣言型イベント ハンドラ

宣言型イベント ハンドラは、宣言型条件とアクションで構成されるルールを定義する手段を提供します。条件は JavaScript エンジンではなくブラウザで評価されるため、ラウンドトリップ レイテンシが短縮され、効率が大幅に向上します。

宣言型イベント ハンドラは、たとえば Declarative Content API で使用されます。このページでは、すべての宣言型イベント ハンドラの基盤となるコンセプトについて説明します。

ルール

最もシンプルなルールは、1 つ以上の条件と 1 つ以上のアクションで構成されます。

const rule = {
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

条件のいずれかが満たされると、すべてのアクションが実行されます。

条件とアクションに加えて、各ルールに識別子を付与して、以前に登録したルールの登録解除を簡素化したり、ルール間の優先順位を定義する優先度を付与したりできます。優先度は、ルールが競合している場合や、特定の順序で実行する必要がある場合にのみ考慮されます。アクションは、ルールの優先度の降順で実行されます。

const rule = {
  id: "my rule",  // optional, will be generated if not set.
  priority: 100,  // optional, defaults to 100.
  conditions: [ /* my conditions */ ],
  actions: [ /* my actions */ ]
};

イベント オブジェクト

イベント オブジェクトはルールをサポートする場合があります。これらのイベント オブジェクトは、イベントが発生したときにコールバック関数を呼び出しませんが、登録されたルールに少なくとも 1 つの満たされた条件があるかどうかをテストし、このルールに関連付けられたアクションを実行します。宣言型 API をサポートするイベント オブジェクトには、events.Event.addRules()events.Event.removeRules()events.Event.getRules() の 3 つの関連メソッドがあります。

ルールの追加

ルールを追加するには、イベント オブジェクトの addRules() 関数を呼び出します。最初のパラメータとしてルール インスタンスの配列を受け取り、完了時に呼び出されるコールバック関数を受け取ります。

const rule_list = [rule1, rule2, ...];
addRules(rule_list, (details) => {...});

ルールが正常に挿入された場合、details パラメータには、渡された rule_list と同じ順序で表示される挿入されたルールの配列が含まれます。ここで、省略可能なパラメータ idpriority は生成された値で入力されています。無効な条件やアクションが含まれているなど、ルールが無効な場合、ルールは追加されず、コールバック関数が呼び出されるときに runtime.lastError 変数が設定されます。rule_list の各ルールには、別のルールですでに使用されている識別子または空の識別子ではない一意の識別子が含まれている必要があります。

ルールを削除する

ルールを削除するには、removeRules() 関数を呼び出します。最初のパラメータとしてルール識別子のオプションの配列を受け取り、2 番目のパラメータとしてコールバック関数を受け取ります。

const rule_ids = ["id1", "id2", ...];
removeRules(rule_ids, () => {...});

rule_ids が識別子の配列の場合、配列にリストされている識別子を持つすべてのルールが削除されます。rule_ids に不明な ID がリストされている場合、この ID は通知なく無視されます。rule_idsundefined の場合、この拡張機能の登録済みルールはすべて削除されます。ルールが削除されると、callback() 関数が呼び出されます。

ルールを取得する

登録済みルールのリストを取得するには、getRules() 関数を呼び出します。この関数は、removeRules() と同じセマンティクスを持つルール識別子の配列(省略可)とコールバック関数を受け取ります。

const rule_ids = ["id1", "id2", ...];
getRules(rule_ids, (details) => {...});

callback() 関数に渡される details パラメータは、入力された省略可能なパラメータを含むルールの配列を参照します。

パフォーマンス

パフォーマンスを最大限に高めるには、次のガイドラインに留意してください。

ルールを一括で登録および登録解除します。登録または登録解除のたびに、Chrome は内部データ構造を更新する必要があります。この更新はコストのかかるオペレーションです。

元のコード
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1]);
browser.declarativeWebRequest.onRequest.addRules([rule2]);
選好
const rule1 = {...};
const rule2 = {...};
browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);

events.UrlFilter で正規表現よりも部分文字列のマッチングを優先します。部分文字列ベースのマッチングは非常に高速です。

元のコード
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {urlMatches: "example.com/[^?]*foo" }
});
選好
const match = new browser.declarativeWebRequest.RequestMatcher({
  url: {hostSuffix: "example.com", pathContains: "foo"}
});

同じアクションを共有するルールが多数ある場合は、ルールを 1 つに統合します。ルールは、1 つの条件が満たされるとすぐにアクションをトリガーします。これにより、重複するアクション セットのマッチングが高速化され、メモリ使用量が削減されます。

元のコード
const condition1 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule1 = { conditions: [condition1],
                actions: [new browser.declarativeWebRequest.CancelRequest()]
              };
const rule2 = { conditions: [condition2],
                actions: [new browser.declarativeWebRequest.CancelRequest()]
              };
browser.declarativeWebRequest.onRequest.addRules([rule1, rule2]);
選好
const condition1 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'example.com' }
});
const condition2 = new browser.declarativeWebRequest.RequestMatcher({
  url: { hostSuffix: 'foobar.com' }
});
const rule = { conditions: [condition1, condition2],
              actions: [new browser.declarativeWebRequest.CancelRequest()]
             };
browser.declarativeWebRequest.onRequest.addRules([rule]);

フィルタされたイベント

フィルタされたイベントは、リスナーが関心のあるイベントのサブセットを指定できるメカニズムです。フィルタを使用するリスナーは、フィルタを通過しないイベントに対して呼び出されません。これにより、リスニング コードがより宣言的で効率的になります。Service Workerは、関心のないイベントを処理するために起動する必要はありません。

フィルタされたイベントは、手動フィルタリング コードからの移行を可能にすることを目的としています。

元のコード
browser.webNavigation.onCommitted.addListener((event) => {
  if (hasHostSuffix(event.url, 'google.com') ||
      hasHostSuffix(event.url, 'google.com.au')) {
    // ...
  }
});
選好
browser.webNavigation.onCommitted.addListener((event) => {
  // ...
}, {url: [{hostSuffix: 'google.com'},
          {hostSuffix: 'google.com.au'}]});

イベントは、そのイベントにとって意味のある特定のフィルタをサポートします。イベントがサポートするフィルタのリストは、そのイベントのドキュメントの「フィルタ」セクションに記載されています。

URL の照合(上記の例を参照)では、イベント フィルタは、スキームとポートの照合を除き、events.UrlFilter で表現できるものと同じ URL 照合機能をサポートしています。

Event

Chrome イベントのリスナーの追加と削除を可能にするオブジェクト。

プロパティ

  • addListener

    void

    イベントにイベント リスナー コールバック を登録します。

    addListener 関数は次のようになります。

    (callback: H) => {...}

    • callback

      H

      イベントが発生したときに呼び出されます。この関数のパラメータは、イベントの種類によって異なります。

  • addRules

    void

    イベントを処理するルールを登録します。

    addRules 関数は次のようになります。

    (rules: Rule<anyany>[], callback?: function) => {...}

    • ルール

      Rule<anyany>[]

      登録するルール。以前に登録したルールは置き換えられません。

    • callback

      関数 省略可

      callback パラメータは次のようになります。

      (rules: Rule<anyany>[]) => void

      • ルール

        Rule<anyany>[]

        登録されたルール。省略可能なパラメータには値が入力されます。

  • getRules

    void

    現在登録されているルールを返します。

    getRules 関数は次のようになります。

    (ruleIdentifiers?: string[], callback: function) => {...}

    • ruleIdentifiers

      string[] 省略可

      配列が渡された場合、この配列に含まれる識別子を持つルールのみが返されます。

    • callback

      関数

      callback パラメータは次のようになります。

      (rules: Rule<anyany>[]) => void

      • ルール

        Rule<anyany>[]

        登録されたルール。省略可能なパラメータには値が入力されます。

  • hasListener

    void

    hasListener 関数は次のようになります。

    (callback: H) => {...}

    • callback

      H

      登録ステータスをテストするリスナー。

    • 戻り値

      ブール値

      callback がイベントに登録されている場合は true。

  • hasListeners

    void

    hasListeners 関数は次のようになります。

    () => {...}

    • 戻り値

      ブール値

      イベントにイベント リスナーが登録されている場合は true。

  • removeListener

    void

    イベントからイベント リスナーのコールバックを登録解除します。

    removeListener 関数は次のようになります。

    (callback: H) => {...}

    • callback

      H

      登録解除するリスナー。

  • removeRules

    void

    現在登録されているルールを登録解除します。

    removeRules 関数は次のようになります。

    (ruleIdentifiers?: string[], callback?: function) => {...}

    • ruleIdentifiers

      string[] 省略可

      配列が渡された場合、この配列に含まれる識別子を持つルールのみが登録解除されます。

    • callback

      関数 省略可

      callback パラメータは次のようになります。

      () => void

Rule

イベントを処理するための宣言型ルールの説明。

プロパティ

  • actions

    any[]

    条件のいずれかが満たされた場合にトリガーされるアクションのリスト。

  • conditions

    any[]

    アクションをトリガーできる条件のリスト。

  • id

    文字列 省略可

    このルールを参照できる省略可能な識別子。

  • priority

    number 省略可

    このルールの省略可能な優先度。デフォルトは 100 です。

  • tags

    string[] 省略可

    タグは、ルールにアノテーションを付けたり、ルールのセットに対してオペレーションを実行したりするために使用できます。

UrlFilter

さまざまな条件で URL をフィルタします。イベント フィルタリングをご覧ください。すべての条件で大文字と小文字が区別されます。

プロパティ

  • cidrBlocks

    string[] 省略可

    Chrome 123 以降

    URL のホスト部分が IP アドレスで、配列で指定された CIDR ブロックのいずれかに含まれている場合に一致します。

  • hostContains

    文字列 省略可

    URL のホスト名に指定された文字列が含まれている場合に一致します。ホスト名コンポーネントに接頭辞「foo」があるかどうかをテストするには、hostContains: '.foo' を使用します。ホスト名の先頭に暗黙的なドットが追加されるため、これは「www.foobar.com」と「foo.com」に一致します。同様に、hostContains を使用して、コンポーネントの接尾辞(「foo.」)と照合したり、コンポーネント(「.foo.」)と完全に一致させたりすることもできます。ホスト名の末尾に暗黙的なドットは追加されないため、最後のコンポーネントの接尾辞一致と完全一致は hostSuffix を使用して個別に行う必要があります。

  • hostEquals

    文字列 省略可

    URL のホスト名が指定された文字列と等しい場合に一致します。

  • hostPrefix

    文字列 省略可

    URL のホスト名が指定された文字列で始まる場合に一致します。

  • hostSuffix

    文字列 省略可

    URL のホスト名が指定された文字列で終わる場合に一致します。

  • originAndPathMatches

    文字列 省略可

    クエリ セグメントとフラグメント識別子を除いた URL が、指定された正規表現と一致する場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。正規表現では RE2 構文を使用します。

  • pathContains

    文字列 省略可

    URL のパス セグメントに指定された文字列が含まれている場合に一致します。

  • pathEquals

    文字列 省略可

    URL のパス セグメントが指定された文字列と等しい場合に一致します。

  • pathPrefix

    文字列 省略可

    URL のパス セグメントが指定された文字列で始まる場合に一致します。

  • pathSuffix

    文字列 省略可

    URL のパス セグメントが指定された文字列で終わる場合に一致します。

  • ポート

    (number | number[])[] 省略可

    URL のポートが指定されたポートリストのいずれかに含まれている場合に一致します。たとえば、[80, 443, [1000, 1200]] は、ポート 80、443、および 1000 ~ 1200 の範囲のすべてのリクエストと一致します。

  • queryContains

    文字列 省略可

    URL のクエリ セグメントに指定された文字列が含まれている場合に一致します。

  • queryEquals

    文字列 省略可

    URL のクエリ セグメントが指定された文字列と等しい場合に一致します。

  • queryPrefix

    文字列 省略可

    URL のクエリ セグメントが指定された文字列で始まる場合に一致します。

  • querySuffix

    文字列 省略可

    URL のクエリ セグメントが指定された文字列で終わる場合に一致します。

  • スキーム

    string[] 省略可

    URL のスキームが配列で指定されたスキームのいずれかと等しい場合に一致します。

  • urlContains

    文字列 省略可

    URL(フラグメント識別子を除く)に指定された文字列が含まれている場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。

  • urlEquals

    文字列 省略可

    URL(フラグメント識別子を除く)が指定された文字列と等しい場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。

  • urlMatches

    文字列 省略可

    URL(フラグメント識別子を除く)が指定された正規表現と一致する場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。正規表現では RE2 構文を使用します。

  • urlPrefix

    文字列 省略可

    URL(フラグメント識別子を除く)が指定された文字列で始まる場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。

  • urlSuffix

    文字列 省略可

    URL(フラグメント識別子を除く)が指定された文字列で終わる場合に一致します。ポート番号がデフォルトのポート番号と一致する場合、ポート番号は URL から削除されます。