1

我正在构建Chrome扩展,并在弹出窗口中遇到以下错误。 enter image description here如何解决未定义和南?

我明确定义了'total'变量,并在其中存储了一个本地存储的值。但为什么我的 得到这样的错误?

我想要做的事:

1)我存储本地存储和访问popup.js总它变。在popup.html 2)然后,修改<p>元件

这里是popup.html和popup.js:

popup.js:

var total,percentage; 

chrome.storage.local.get('myVariable', function (items) { 
total = (items.myVariable); 
}); 



percentage = total/7.25; 

document.getElementById("total").innerHTML = total; 
document.getElementById("percentage").innerHTML = percentage; 

popup.html:

<!DOCTYPE HTML> 

<html> 
    <head> 
    <title>Popup page</title> 
    </head> 
    <body> 

    <form name="F1" method="POST"> 
     TOTAL : <p id="total"></p> 
    PERCENTAGE : <p id="percentage"></p>  
    </form> 

    <script src="popup.js"> 

    </script> 

    </body> 
</html> 

片段从我contentscript.js

chrome.storage.local.set({ 
     'myVariable': total; 
     }); 
chrome.runtime.sendMessage({ 
    greeting: "myAction" 
}); 

在background.js我有这样的:

chrome.runtime.onMessage.addListener(
    function (request, sender, sendResponse) { 
    if (request.greeting == "myAction") { 
     collectData(); 
    } 
}); 

我们应该添加一个侦听器访问本地存储之前popup.js。我添加并检查,但 我收到相同的结果。 这段代码有什么问题? 如何才能完成我要做的事情?

地方我扩展的存储:

enter image description here

回答

2

chrome.storage.local.get回调是异步执行的,所以在您尝试使用它之前总不会定义。如果将脚本的其余部分移到回调中,它应该可以工作。

var total,percentage; 

chrome.storage.local.get('myVariable', function (items) { 
    total = (items.myVariable); 

    percentage = total/7.25; 

    document.getElementById("total").innerHTML = total; 
    document.getElementById("percentage").innerHTML = percentage; 
}); 
+0

我试着按建议,但它没有工作伙计。 console.logs.items()显示'未定义'的存储变量。我添加了本地存储的屏幕截图,其中var不存储。如何解决这个问题? – Nikhil

1

两个主要错误: 1)只是在做无功x是一个无操作在JavaScript中,你必须为它分配一个值。 2)即使你修复了你有更大的错误。存储是异步的,因此在得到结果之前执行“get”之后的行。

+0

我该如何解决这个问题呢? – Nikhil

+0

放置断点并进行调试。上面的答案我说同样,并有一个工作示例 –

相关问题