はじめに
ちょっとしたChrome拡張機能を作成している中で、chrome.storage
を使用する機会があったのでそれについて調べた内容を書きます。
chrome.storageとは
拡張機能の中で、タブ遷移や削除などをしても状態を保持したい時に使用するAPIです。
Chrome拡張機能作成用に機能が色々足されたlocalStorageという理解でいいのかなと。
Refarenceでは以下のように書かれています。
拡張機能の Service Worker やコンテンツ スクリプトを含むすべての拡張機能のコンテキストは、Storage API にアクセスできます。
JSON のシリアル化可能な値は、オブジェクトのプロパティとして格納されます。
Storage API は、一括読み取り / 書き込みオペレーションに対して非同期です。
ユーザーがキャッシュや閲覧履歴を削除しても、データは保持されます。
逆に、拡張機能を作成する上でlocalStorage
を使用するのは推奨されないようです。
考えたら当たり前か...
ストレージの種類
以下4つのストレージの種類があります。
storage.local
ローカルにデータを保存します。
拡張機能が削除されると削除されます。容量は10MBまでですが、"unlimitedStorage"
権限で増やせます。
storage.managed
システム管理者が設定する読み取り専用ストレージです。
ポリシーで構成され、組織の全ユーザーに適用されます。
これはあんまり使わなそうですね。
storage.session
セッション中のみメモリにデータを保持します。容量は10MB。
chrome.storage.session.setAccessLevel()
でアクセス可能範囲を変更できます。Service Worker に適しています。
storage.sync
データを同期されたChrome間で同期できます。
普段使っている拡張機能の設定値などはこれで同期されていたんですね。
容量は約100KB、アイテムごとに8KB。オフライン時はローカル保存され、復帰後に同期されます。
非常に便利ですね!
当たり前ですが、機密データの保存はstorage.session
を推奨しているようです。
さいごに
最後までお読みいただきありがとうございました!
なにかブラウザ間で同期する、便利な拡張機能を作ってみたいですね🤔