私はChrome拡張機能を開発しています。データを保存してから、ある時点で取得する必要があります。availablestorage
sに遭遇しました:window.localStorage
およびchrome.storage.local
。
だから私の質問は、どちらがChrome拡張機能で使用する正しい選択であるかです:window.localStorage
またはchrome.storage.local
?
PS。browser action
を使用して、HTML
のローカルIFRAME
をロードしています。だから私はpopup.js
を使用していません。
それはあなたのChrome拡張機能が何をするかによって完全に異なります。window.localStorageはHTML5ストレージです。バックグラウンドページで実行している場合を除き、データの取得と設定のみが可能です。特定のドメインのストレージ:WebページのlocalStorageを使用するため、これはDOMに挿入されたコードにも当てはまります。
つまり、chrome://があるため、Webページとは独立して動作するバックグラウンドページでlocalStorageを使用しない限り、異なるWebページ間でデータを共有することはできません。ドメインとしてのURI
一方、chrome.storage.localは、Chrome ExtensionsおよびChromeアプリがデータをより中央の場所に保存するために設計されています。可能性の1つは、バックグラウンドページがデータの設定と取得を処理し、コンテンツスクリプトがWebページの変更と対話を処理することです。
ただし、これらのAPIはコンテンツスクリプトでも機能し、私が書いた拡張機能は両方とも、コンテンツスクリプトから呼び出されたchrome.storage.localを使用します。
例として、実際に読むまでStack Exchangeに受信トレイアイテムを保持するStack Appを作成しました。これは StackInbox と呼ばれます。 Stack Exchangeサイトは数百のドメインにまたがっているので、ユーザーのaccountIdを保存してすべてのサイトで再利用できるため、chrome.storage.localを選択しました。これにより、受信トレイデータが同期され、コンテンツスクリプトで直接使用できます。
簡単なテストとして、コンテンツスクリプトの1つのドメインのlocalStorageにデータを配置し、別のドメインからそれをプルしようとすると、データがそこにないことがわかります。 chrome.storage.localでは、これは問題ではありません。
最後に、Chrome拡張機能とChromeアプリはホワイトリストに登録されます。ユーザーがインストールを選択したため、通常は通常のウェブサイトよりも多くのことができます。 、マニフェストで「unlimitedStorage」権限を指定することにより、HTML5 localStorageに設定された5MBの制限をはるかに超えてデータを保存できます。
詳細については、 GoogleのドキュメントChrome Storage をご覧ください。
localStorage
長所:
var value = localStorage[key]
_短所:
JSON.stringify
_chrome.storage.local
_長所:
chrome.storage.onChanged
_"unlimitedStorage"
_パーミッションでは、任意の大量のデータを保持できます。デフォルト値用の素晴らしい組み込みメカニズムがあります:
_chrome.storage.local.get({key: defaultValue}, function(value){/*...*/});
_
短所:
非同期のため、作業が少し難しくなります。
_chrome.storage.local.get("key", function(value){/* Continue here */});
_
chrome.storage.local.get(null)
を呼び出してすべての値を取得するか、 Storage Area Explorer のようなものを使用する必要があります。chrome.storage.sync
_上記と同じですが、次のとおりです。
長所:
短所:
2016年11月6日現在、 firefox WebExtensionsではまだサポートされていません またはEdge Extensionsなので、ポータブルではありません。
注:_storage.sync
_は FF WebExtension互換 になりましたが、ChromeとFFを相互にネイティブに同期させる方法はありません。