3

単純な chrome 拡張機能をコーディングしようとしていますが、コンテンツ スクリプト "auto.js" から options.html のローカル ストレージにアクセスしようとすると、問題が発生します。

私が集めたもの(グーグルとChromeの紛らわしいドキュメントを読む)から、これは次を使用してのみ可能です:

chrome.runtime.sendMessage & chrome.runtime.onMessage.addListener

コンテンツ スクリプト「auto.js」:

var quantity   = ""
var shoe_size  = ""

function addToCart() {

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
    var quantity = response.qty;
}

chrome.runtime.sendMessage({localstorage: "size"}), function(response){
    var shoe_size = response.size;
}
...

「options.js」の私のリスナー:

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse){

  if(request.localstorage == "qty")
    sendResponse({qty: localStorage.qty});
  else if(request.localstorage == "size")
    sendResponse({size: localStorage.size});
  else
    sendResponse({});
});
...

問題は、私の変数でありquantityshoe_sizehtml ローカル ストレージから「返された」値に設定されることはありません。

js コンソールにエラーは表示されず、これをデバッグする方法がわかりません。フィードバックは大歓迎です。

4

2 に答える 2

3

これは、sendMessage がトリガーされた直後に sendMessage の後のコードが実行されるためです。それらは設定されていますが、応答を待つことはなく、必要な時間の後に設定されます。ここでこれと同じ問題がありましたSynchronously get Stored data from content scripts . それを解決するには、内部に必要な関数を入れることができます

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
    var quantity = response.qty;
}

設定されていることを確認するには、次をテストします。

chrome.runtime.sendMessage({localstorage: "qty"}), function(response){
    var quantity = response.qty;
}

alert("waiting for a second, to make sure that response is ready ...");
alert("Not it is set:" + quantity);
于 2013-03-29T05:40:44.427 に答える
0

sendMessage コールバック関数内var quantity = response.qty;で前に書いています。varこれにより、偶然にも、グローバル変数と同じ名前のローカル変数が作成されます。しかし、それは別の変数です。そして、それを格納しているメモリは、sendMessage が終了するとすぐに解放されます。これはローカル スコープにすぎないためです。

varsendMessage 内にアウェイを残します。

また、これらのグローバル変数にセミコロンがありません。

var quantity   = "";
var shoe_size  = "";

それ以外にconsole.log、sendMessage コールバック関数内のコンテンツ スクリプト 'auto.js' で使用できます。そのスクリプトを読み込んでいる Web ページのコンソールに表示されます。

于 2014-04-25T22:34:29.237 に答える