通过内容脚本从本地存储访问数据

时间:2014-04-03 19:56:56

标签: google-chrome google-chrome-extension content-script

我正在尝试从内容脚本访问本地存储,但即使消息传递正常,输出也不是预期的。

内容脚本

var varproxy = localStorage.getItem('proxy');  //gets data from options page saved to local storage

var proxy = "proxystring";          

chrome.runtime.sendMessage({message:"hey"},
function(response) {

  proxy = response.proxy; 
  console.log(response.proxy);

}
);

console.log(proxy);

背景页(用于传递消息)

chrome.runtime.onMessage.addListener(
  function(request, sender, sendResponse) 
  {
  if (request.message == "hey") 
  {
    sendResponse({proxy: varproxy});
    console.log('response sent');
  } 
  else 
  {sendResponse({});}
  });

控制台将代理记录为varproxy的值,并将“响应已发送”记录为

console.log(proxy);

将代理记录为“proxystring”

为什么代理的价值不会改变?如何根据需要进行更改?

2 个答案:

答案 0 :(得分:1)

消息发送 - 在许多chrome API函数中 - 是一个异步函数。翻译不会等待响应,但会跳到下一行。因此,很容易发生首先评估日志(代理),因为与后台页面通信需要一些时间。收到响应后,代理的值就会更改。

答案 1 :(得分:1)

我可能会建议您尝试其他实现吗? Chrome存储怎么样?

然后您根本不需要传递任何消息,因为您可以在内容脚本中访问chrome存储。

示例,我在扩展程序的内容脚本中执行此操作,以从chrome存储中获取多个值:

chrome.storage.sync.get({HFF_toolbar: 'yes',HFF_logging: 'yes',HFF_timer: '1 Minute'},
function (obj) {
  toolbar_option = obj.HFF_toolbar;
  logging_option = obj.HFF_logging;
  timer_option = obj.HFF_timer;
  /* the rest of my content script, using those options */

无论如何,我个人认为这种方法比消息传递实现更容易。