我将变量 newUser 从 options.html 发送到 background.html code> with chrome.extension.getBackgroundPage()就像这样
document.getElementById(save)。addEventListener(click,function() { var newUser = document.getElementById(getEmail)。value; $ var bkg = chrome.extension.getBackgroundPage(); bkg.saveNewUser(newUser); console.log(newUser+ newUser); },false)在 background.html 我有
函数saveNewUser(newUser) { newUser = newUser; //这应该是全球性的? console.log(来自选项页面的新用户+ newUser); } console.log(newUser from options page+ newUser);但是 newUser 是函数的局部。我的理解是,如果一个变量保存在没有关键字 var 的函数内,它应该是全局的。但在这种情况下并非如此。函数外的 console.log 会抛出未捕获的ReferenceError:newUser未定义错误。
我做错了什么,以及如何修改范围以在函数外部使用 newUser ?
谢谢。
编辑
background.html 但我仍然得到newUser undefined错误:
var extension_user 函数saveNewUser(newUser) { extension_user = newUser; // this should be global console.log(extension_user from options page+ extension_user); } console.log(选项页面的extension_user+ extension_user);更新 <我改变了两个页面来反映答案和评论,但仍然在函数之外,变量是未定义的。我做错了什么?
options.html
document.getElementById(save)。addEventListener(click,function() { var newUserEmail = document.getElementById(getEmail).value; var bkg = chrome.extension.getBackgroundPage(); bkg.saveNewUser(newUserEmail); console.log(newUserEmail+ newUserEmail); },false)background.html
var newUser 函数saveNewUser(newUserEmail) { window.newUser = newUserEmail; //这应该是全局的 console.log(newUser from options page inside function+ newUser); } console.log(newUser from options page+ newUser);解决方案
变量不存在于全局范围中。因此它给出了一个参考错误。只需在全局范围内将变量 newUser 声明为 var newUser; 。这应该可以解决问题。声明变量时,始终使用 var 关键字。这是一个很好的编程习惯。永远不要在本地范围内声明全局变量。你已经知道为什么。如果这个答案对您有帮助,请投票给我。 该代码澄清我的答案:
var newUser; //新用户声明为全局 函数saveNewUser(newuser) { newUser = newuser; //这应该是全球性的? console.log(来自选项页面的新用户+ newUser); } console.log(newUser from options page+ newUser); //没有更多的引用错误
I send the variable newUser from options.html to background.html with chrome.extension.getBackgroundPage() like this
document.getElementById("save").addEventListener( "click", function () { var newUser = document.getElementById("getEmail").value; var bkg = chrome.extension.getBackgroundPage(); bkg.saveNewUser(newUser); console.log("newUser " + newUser); } , false)In background.html I have
function saveNewUser (newUser) { newUser = newUser; //this should be global? console.log("newUser from options page " + newUser); } console.log("newUser from options page " + newUser);but newUser is local to the function. My understanding is that if a variable is saved inside a function without the keyword var it should be global. But in this case it is not. The console.log outside the function throws Uncaught ReferenceError: newUser is not defined error.
What am I doing wrong and how can I fix the scope to use newUser outside the function?
Thanks.
Edit
I tried the following in background.html but I still get newUser undefined error:
var extension_user function saveNewUser (newUser) { extension_user = newUser; //this should be global console.log("extension_user from options page " + extension_user); } console.log("extension_user from options page " + extension_user);Update
I changed both pages to reflect the answers and comments but still outside the function the variable is undefined. What am I doing wrong?
options.html
document.getElementById("save").addEventListener( "click", function () { var newUserEmail = document.getElementById("getEmail").value; var bkg = chrome.extension.getBackgroundPage(); bkg.saveNewUser(newUserEmail); console.log("newUserEmail " + newUserEmail); } , false)background.html
var newUser function saveNewUser (newUserEmail) { window.newUser = newUserEmail; //this should be global console.log("newUser from options page inside function" + newUser); } console.log("newUser from options page " + newUser);解决方案
The newUser variable does not exist in the global scope until the function saveNewUser is called. Thus it gives a reference error. Just declare the variable newUser in the global scope as var newUser;. That should solve the problem. Always use the var keyword when declaring variables. It's a good programming practice. Never declare global variables within local scopes. You already know why. Please vote for me if this answer helped you.
Edits:
Here's the code to clarify my answer:
var newUser; // new user declared as a global function saveNewUser (newuser) { newUser = newuser; // this should be global? console.log("newUser from options page " + newUser); } console.log("newUser from options page " + newUser); // no more reference error
更多推荐
我如何使全局函数内定义的变量newUser?
发布评论