Chrome拡張機能において、外部APIとの非同期通信を行うには、fetch 関数を利用するのが一般的です。以下に、拡張機能における fetch を用いた非同期通信の基本的な使い方と注意点について詳しく説明します。
1. fetch の基本構文
fetch の基本構文fetch は Promise を返す非同期関数で、次のように使います。
2. Chrome拡張機能での利用場所
fetch は以下のようなスクリプト内で使用できます。
-
コンテントスクリプト(制限あり)
-
バックグラウンドスクリプト / サービスワーカー
-
ポップアップ / オプションページのスクリプト
ただし、コンテントスクリプトから直接外部ドメインにリクエストを送ることはできません。その場合は、バックグラウンドスクリプト経由で通信する必要があります。
3. パーミッションの設定(manifest.json)
manifest.json)外部APIにアクセスするには、manifest.json に適切なパーミッションを記述する必要があります。
例: host_permissions を使用
host_permissions を使用
4. POSTリクエストの例
外部APIにデータを送信するには、method: "POST" と body を指定します。
5. CORS(クロスオリジンリソース共有)についての注意
外部APIが CORSを許可していない場合、fetch による直接アクセスはブロックされます。これは拡張機能でも例外ではありません。回避策としては以下のいずれかになります。
-
外部API側で
Access-Control-Allow-Originを設定してもらう -
バックグラウンドスクリプトでプロキシを介してリクエストを送る
6. バックグラウンド経由での実装例(メッセージ通信)
コンテントスクリプト側
サービスワーカー側
まとめ
-
fetch を使えば、簡潔に外部APIと非同期通信が可能
-
通信先ドメインを host_permissions に指定する必要がある
-
CORS制限がある場合はバックグラウンドスクリプトを利用する
-
非同期処理であるため、then や async/await を適切に使う
生成日:2025/05/18