Javascript 函数不访问扩展中的Chrome存储值
我正在开发一个chrome扩展,它可以将给定页面上的pries转换为用户需要工作的小时数,以赚取该金额。扩展通过弹出窗口接收用户工资信息,然后在chrome存储器中设置。那部分很好用 我遇到的问题是访问该值并使用它来运行计算。JS可以很好地解析这些值并调用convert函数,但在计算中只使用占位符hourly值1,而不是从chrome存储中检索它。相反,它似乎在所有解析之后访问chrome存储(我根据控制台日志运行的时间来计算) 你知道这是什么原因吗?我尝试将整个解析移到它自己的函数中,以便在$(document).ready(函数)末尾调用,但它仍然无法从chrome存储中获取值 在content.js中:Javascript 函数不访问扩展中的Chrome存储值,javascript,google-chrome,google-chrome-extension,google-chrome-storage,Javascript,Google Chrome,Google Chrome Extension,Google Chrome Storage,我正在开发一个chrome扩展,它可以将给定页面上的pries转换为用户需要工作的小时数,以赚取该金额。扩展通过弹出窗口接收用户工资信息,然后在chrome存储器中设置。那部分很好用 我遇到的问题是访问该值并使用它来运行计算。JS可以很好地解析这些值并调用convert函数,但在计算中只使用占位符hourly值1,而不是从chrome存储中检索它。相反,它似乎在所有解析之后访问chrome存储(我根据控制台日志运行的时间来计算) 你知道这是什么原因吗?我尝试将整个解析移到它自己的函数中,以便在$
function convert(price){
var hourly = 1;
chrome.storage.sync.get('hourly', function(result){
hourly = result.hourly;
console.log(hourly);
});
return price / hourly;
}
var elements = document.getElementsByTagName('*');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];
if (node.nodeType === 3) {
var text = node.nodeValue;
if (text[0] == '$'){
if (/\s/.test(text)){
var price = text.substring(0, text.indexOf(' '));
var priceNum = text.substring(1, text.indexOf(' '));
var time = convert(parseFloat(priceNum));
var timeStr = time.toFixed(2);
if (text.length > 5){
var remainder = text.substring(4);
var nextPrice = remainder.indexOf('$');
if (nextPrice != -1){
var priceTwo = remainder.substring(nextPrice);
}
var priceTwo = null;
}
}
else {
var price = text.substring(0);
var priceNum = text.substring(1);
var time = convert(parseFloat(priceNum));
var timeStr = time.toFixed(2);
}
}
var replacedText1 = text.replace(price, timeStr);
if (replacedText1 !== text) {
element.replaceChild(document.createTextNode(replacedText1 + ' hours'), node);
}
}
}
}
函数转换(价格){
var小时=1;
chrome.storage.sync.get('hourly',函数(结果){
小时=结果。小时;
控制台日志(每小时);
});
返回价格/小时;
}
var elements=document.getElementsByTagName('*');
对于(var i=0;i5){
var余数=文本。子字符串(4);
var nextPrice=rements.indexOf(“$”);
如果(nextPrice!=-1){
var priceTwo=余数.substring(nextPrice);
}
var-priceTwo=null;
}
}
否则{
var price=text.substring(0);
var priceNum=text.substring(1);
var-time=convert(parseFloat(priceNum));
var timeStr=固定时间(2);
}
}
var replacedText1=text.replace(price,timeStr);
if(replacedText1!==文本){
元素.replaceChild(document.createTextNode(replacedText1+'hours'),节点);
}
}
}
}
chrome.storage.sync.get通过回调异步返回结果。您可以通过将chrome.storage.sync.get包装到Promise中,然后在外部接收解析数据,然后在函数中接收解析数据,从而获得结果:
function convert(price){
var hourly = 1;
return new Promise(function(resolve, reject) {
chrome.storage.sync.get('hourly', function(result){
hourly = result.hourly;
resolve(price / hourly);
});
});
}
var elements = document.getElementsByTagName('*');
for (var i = 0; i < elements.length; i++) {
var element = elements[i];
for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];
if (node.nodeType === 3) {
var text = node.nodeValue;
if (text[0] == '$'){
if (/\s/.test(text)){
var price = text.substring(0, text.indexOf(' '));
var priceNum = text.substring(1, text.indexOf(' '));
if (text.length > 5){
var remainder = text.substring(4);
var nextPrice = remainder.indexOf('$');
if (nextPrice != -1){
var priceTwo = remainder.substring(nextPrice);
}
var priceTwo = null;
}
}
else {
var price = text.substring(0);
var priceNum = text.substring(1);
}
}
convert(parseFloat(priceNum)).then(function(time) {
var timeStr = time.toFixed(2);
var replacedText1 = text.replace(price, timeStr);
if (replacedText1 !== text) {
element.replaceChild(document.createTextNode(replacedText1 + ' hours'), node);
}
});
}
}
}
函数转换(价格){
var小时=1;
返回新承诺(功能(解决、拒绝){
chrome.storage.sync.get('hourly',函数(结果){
小时=结果。小时;
解决(价格/小时);
});
});
}
var elements=document.getElementsByTagName('*');
对于(var i=0;i5){
var余数=文本。子字符串(4);
var nextPrice=rements.indexOf(“$”);
如果(nextPrice!=-1){
var priceTwo=余数.substring(nextPrice);
}
var-priceTwo=null;
}
}
否则{
var price=text.substring(0);
var priceNum=text.substring(1);
}
}
转换(parseFloat(priceNum)).then(函数(时间){
var timeStr=固定时间(2);
var replacedText1=text.replace(price,timeStr);
if(replacedText1!==文本){
元素.replaceChild(document.createTextNode(replacedText1+'hours'),节点);
}
});
}
}
}
chrome.*API是异步的。请参阅可能的副本