なんも分からないのでしらべた

なんもわからん!…ので、できる範囲で調べる。

ChromeExtensionのメッセージ通信にchrome.storageを用いる案

ChromeExtensionの設計において、
popup-background間のメッセージ通信はchrome.runtime.sendMessageを利用する。
また、content scriptに対しては、chrome.tabs.queryを利用する。
これらの通信方式の別案として、chrome.storageを使った通信方式ができるのではないかと考えたので記事にする。

chrome.storage.onChanged.addListenerという関数があり、これはstorageのデータ変更を監視できる関数だ。
通信を送る側は、メッセージ内容をstorageに保管する。
受信側は、リスナーが反応して、storageの中身であるメッセージ内容を取り出す、というイメージだ。

storage通信を行うメリットとしては、Extensionのパーミッション設定レベルを下げることができる点だ。
chrome.tabs.queryを利用した通信では、パーミッション設定としてmanifest.json上のpermission項目にtabsを追加する必要があるが、
これを付与した場合、Extensionインストール時の警告として若干キツメの文言が出てしまう。*1
一方、storage通信ではtabsパーミッションが不要となるるため、警告内容がマイルドになり、インストール時のユーザー離脱を減らせる…かもしれない。*2

参考

ChromeExtensionのメッセージ通信についての解説
var.blog.jp

タブ通信方法など
y-anz-m.blogspot.com

ChromeStorageについての分かりやすいまとめ
qiita.com

終わりに

本来のstorageの使い方ではないので、多用するようだとあんまり良くないことも起こりそう。
例えば、データ保存にstorageを多用するExtensionだと、メッセージ通信・非メッセージ通信(本来のstorageの用途)の分岐処理の実装などが必要となる。
ただまあ、作業していてふと思いついたので記事として残しておく。

*1:「このアプリはユーザーの全データにアクセスとか」とかの文言

*2:もちろん、storageパーミッションが必要になるため、警告自体は出る