1

我正在写一个chrome扩展,我想用铬存储管理所有的数据/变量。据我所知,我应该可以在我的扩展中使用chrome.storage。弹出窗口和浏览器动作窗口之间的chrome.storage

我想在browser_action脚本中设置一些东西,然后在由后台脚本创建的窗口中访问它。 HTML和JS文件都有相应的名称。

这是我曾尝试没有运气:

//manifest.json

{ 
    "manifest_version": 2, 

    "name": "extension", 
    "description": "my extension", 
    "version": "0.1", 

"permissions": [ 
      "tabs", 
      "storage" 
     ], 

    "background": { 
    "scripts": ["background.js"], 
    "persistent": false 
    }, 

    "browser_action": { 
    "default_icon": { 
     "38": "images/icon38.png" 
    }, 
    "default_popup": "settings.html" 
    } 

} 

//background.js

chrome.windows.create({'url': chrome.extension.getURL("newPage.html"),'type': "detached_panel",'focused': true}, function(){ 
    //created newPage.html which has newPage.js 
}); 

//setting.js

document.addEventListener('DOMContentLoaded', function(){ 
    chrome.storage.local.set({'enabled': 'TRUE'}); 
}); 

//newPage.js

chrome.storage.local.get('enabled', function(result){ 
    document.getElementById("myId").innerHTML += "<br>script loaded... and status: " + result.enabled; 
}); 

当我这样做时,newPage.html显示“script loaded ... and status:undefined”。

即使它是异步的,第二次运行脚本时应该填充存储值,对吧?

我可能会错误地使用它。如果是这种情况,在我的新窗口中设置铬存储器访问的正确方法是什么?

任何帮助,将不胜感激!

+0

你有重新加载整个插件?启用的目的是什么? – Todd 2014-12-11 03:01:00

+0

是的。我甚至尝试在newPage.js中设置'enabled'并立即读取它的工作。然后我必须清除存储空间(否则它会保持为“真”),并显示为“未定义”,再次进行上述操作。 – SortingHat 2014-12-11 03:03:23

+0

只是要清楚 - 对不起 - 你确实打开弹出窗口,对吧? – Todd 2014-12-11 03:04:32

回答

3

我认为您的newPage.html在settings.html中的事件处理程序设置之前要求“enabled”的值,该处理程序仅在实际打开浏览器弹出窗口后才执行。所以这就是为什么它是未定义的。打开弹出窗口,你会看到它已经被定义。

+0

再次感谢您花时间帮忙! – SortingHat 2014-12-11 03:19:12

+0

np。总是乐意帮助...当我可以。 – Todd 2014-12-11 03:20:49