177

ユーザーが特定のオプションを定義できるオプション ページがあり、それを localStorage に保存します。options.html

現在、ページで定義されたオプションを取得する必要があるコンテンツ スクリプトもありますが、options.htmlコンテンツ スクリプトから localStorage にアクセスしようとすると、オプション ページから値が返されません。

コンテンツ スクリプトに localStorage、オプション ページ、またはバックグラウンド ページから値を取得させるにはどうすればよいですか?

4

3 に答える 3

255

更新 2016:

Google Chrome がストレージ API をリリースしました: https://developer.chrome.com/docs/extensions/reference/storage/

他の Chrome API と同様に非常に使いやすく、Chrome 内の任意のページ コンテキストから使用できます。

    // Save it using the Chrome extension storage API.
    chrome.storage.sync.set({'foo': 'hello', 'bar': 'hi'}, function() {
      console.log('Settings saved');
    });

    // Read it using the storage API
    chrome.storage.sync.get(['foo', 'bar'], function(items) {
      message('Settings retrieved', items);
    });

これを使用するには、マニフェストで必ず定義してください。

    "permissions": [
      "storage"
    ],

「削除」、「クリア」、「getBytesInUse」のメソッドと、変更されたストレージ「onChanged」をリッスンするイベント リスナーがあります。

ネイティブ localStorage の使用 ( 2011 年からの古い回答)

コンテンツ スクリプトは、拡張ページではなく、Web ページのコンテキストで実行されます。したがって、コンテンツ スクリプトから localStorage にアクセスしている場合は、拡張ページのストレージではなく、その Web ページのストレージになります。

ここで、コンテンツ スクリプトが拡張ストレージ (オプション ページから設定した場所) を読み取れるようにするには、拡張メッセージ パッシングを使用する必要があります。

最初に行うことは、拡張機能にリクエストを送信してデータを取得するようにコンテンツ スクリプトに指示することです。そのデータは、拡張機能の localStorage にすることができます。

contentscript.js

chrome.runtime.sendMessage({method: "getStatus"}, function(response) {
  console.log(response.status);
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getStatus")
      sendResponse({status: localStorage['status']});
    else
      sendResponse({}); // snub them.
});

その周りに API を実行して、一般的な localStorage データをコンテンツ スクリプトに取得したり、場合によっては localStorage 配列全体を取得したりできます。

問題の解決に役立つことを願っています。

ファンシーで一般的であること...

contentscript.js

chrome.runtime.sendMessage({method: "getLocalStorage", key: "status"}, function(response) {
  console.log(response.data);
});

background.js

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
    if (request.method == "getLocalStorage")
      sendResponse({data: localStorage[request.key]});
    else
      sendResponse({}); // snub them.
});
于 2010-10-14T22:11:23.277 に答える
8

別のオプションは、chromestorage API を使用することです。これにより、セッション間のオプションの同期を使用してユーザー データを保存できます。

1 つの欠点は、非同期であることです。

https://developer.chrome.com/extensions/storage.html

于 2012-07-19T05:30:06.810 に答える