6

次のコードを、それ以外の場合は動作する Google Chrome 拡張機能に追加しました…</p>

var storage = chrome.storage ;
console.log("storage is " + storage) ;
var bookmarks = chrome.bookmarks ;
console.log("bookmarks is " + bookmarks) ;

実行すると、コンソールに次のように表示されます

storage is undefined
bookmarks is [object Object] 

つまり、ブックマークは正常に機能しますが、ストレージが動作していません。私のマニフェストは両方を要求しました…

{
   ...
   "permissions": [ "bookmarks", "tabs", "storage" ],
}

重要な場合、この拡張機能は Mac OS X の外部拡張機能としてインストールされます。正しく更新されたことを確認するために、インストールされたファイルから上記のコードを ~/Library/Application Support/Google/Chrome/Default/Extensions にコピーしました。 . そしてもちろん、Chrome を再起動しました。

chrome.storage が定義されていないのはなぜですか?

4

2 に答える 2

5

編集: 以下の回答は 2013 年に書かれたものです。Irfan がコメントで書いたように、現在は 2021 年です。

chrome.storage はコンテンツ スクリプトからも利用できます。拡張機能のコンテンツ スクリプトは、バックグラウンド ページを必要とせずにユーザー データに直接アクセスできます。https://developer.chrome.com/docs/extensions/reference/storage/

元の答え:

LocalStorage は、バックグラウンド ページとポップアップでのみ使用できます。一部のデータにアクセスする必要がある場合は、現在のページからバックグラウンド ページにメッセージを渡す必要があります。コードは次のとおりです。

現在のページで:

chrome.extension.sendMessage({action:"getstorage"}, function(response){
   console.log("storage is " + response.myVar);  
});

バックグラウンド ページ:

chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action == "focusWindow"){
    sendResponse({myVar: localStorage.myStorage});
  }
});

Message Passingの chrome ドキュメントで、さらに多くの例を見つけることができます。

于 2013-02-06T21:24:20.400 に答える
3

「拡張機能」タブの拡張機能内に「リロード(Ctrl + R)」リンクがあり、クリックすると問題が解決します(私は数時間を費やしました)。拡張機能を無効/有効にしても、Chrome ブラウザを再起動しても問題は解決しません。誰かの時間を節約できることを願っています;)

于 2015-11-18T23:33:37.073 に答える