【ブロードキャストチャネルエーピーアイ】

Broadcast Channel API とは?

公開:
💡 ブラウザのタブ同士がおしゃべりできる、同一サイト内のメッセージ交換窓口
📌 このページのポイント
Broadcast Channel API — タブ間メッセージ通信 BroadcastChannel("auth") タブ A postMessage() タブ B onmessage タブ C onmessage Service Worker 活用例 ログアウトの同期 テーマ切替の反映 データ更新の通知
Broadcast Channel APIのイメージ
ひよこ ひよこ
複数タブ間でデータをやりとりしたいことってあるの?
ペンギン先生 ペンギン先生
よくあるよ。たとえばAタブでログアウトしたら、Bタブも自動でログアウトさせたいとか、Aタブでダークモードに切り替えたらBタブも即座に反映させたい、みたいなケースだね
ひよこ ひよこ
使い方は簡単なの?
ペンギン先生 ペンギン先生
とてもシンプルだよ。送信側でnew BroadcastChannel('my-channel')を作ってpostMessage()するだけ。受信側も同じチャネル名でBroadcastChannelを作ってonmessageイベントを待つだけなんだ
ひよこ ひよこ
localStorageのイベントでも似たようなことができなかったっけ?
ペンギン先生 ペンギン先生
よく知ってるね。storageイベントでもタブ間通信はできるけど、Broadcast Channelのほうが設計がクリーンなんだ。localStorage永続化が目的で通信用じゃないし、文字列しか送れない。Broadcast Channelは構造化クローンで複雑なオブジェクトも送れるよ
ひよこ ひよこ
Service Workerとも通信できるの?
ペンギン先生 ペンギン先生
できるよ。Service Workerも同じオリジンなら同じチャネルに参加できるんだ。プッシュ通知を受信したService Workerから、開いている全タブにデータを配信する、といった使い方もできるよ。マイクロフロントエンドの連携にも使われるケースが増えてきているね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Broadcast Channel API」って出てきたら「同じサイトのタブ間でメッセージをやりとりするAPI」と思えればだいたいOK!
📖 おまけ:英語の意味
「Broadcast Channel API」 = 放送チャネル API
💬 Broadcastは「放送する」という意味。テレビの放送のように、1つのメッセージを複数のタブに一斉に届けるイメージだよ
← 用語集にもどる