1

私が取り組んでいる基本的な Google Chrome 拡張機能があり、localStorage から値を取得する際に問題があります。コンテンツ スクリプトで sendMessage を使用して、バックグラウンド ページから変数を要求しています。応答を受け取ると、応答の後に alert() のようなものを置かない限り、変数は常に「未定義」です...その後、変数には私の値が含まれます。これがなぜなのか、正しく行う方法を理解するのを手伝ってもらえますか? この投稿のコードを作成しました。以下に示します。どうもありがとうございました!


マニフェスト.json

{
  "name": "Test Extension",
  "version": "1.0",
  "manifest_version": 2,
  "description": "A test extension.",
  "background": {
    "scripts": ["background.js"]
  },
  "content_scripts": [
    {
      "matches": ["<all_urls>"],
      "js": ["content.js"]
    }
  ],
 "permissions": [
    "tabs", "<all_urls>"
  ]
}

content.js

alert('content');

var color;

chrome.extension.sendMessage({greeting:"color"},function(response){color = response.farewell;});

// alert('pause'); // uncommenting this line lets me get the value...why?

alert('content - ' + color);

background.js

alert('background');

localStorage["color"] = "lightblue";

var color = localStorage["color"];

alert('background - ' + color);

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

if (request.greeting == "color") {sendResponse({farewell:color});}

});

助けてくれてありがとう!:)

4

1 に答える 1

3

応答はコールバック関数にあるためです。あなたがこれを持っているとき:

chrome.extension.sendMessage({greeting:"color"},function(response){color = response.farewell;});

alert('content - ' + color);

ブラウザは sendMessage を実行し、すぐに次の行であるアラートに進みます。sendMessage のコールバックは の後に発生します。基本的にブラウザを一時停止しているため、アラートはそれを「修正」します。色を変数として使用する場合は、コールバック関数 (応答) 内でのみ使用できます。

于 2012-08-31T11:28:53.500 に答える