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>"
  ]
}

内容.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);

背景.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 中的回调. 警报“修复”它,因为您基本上是在暂停浏览器。如果你想使用颜色作为变量,你只能在回调内部使用它:function(response)。

于 2012-08-31T11:28:53.500 回答