chrome.storage.local.get chrome.runtime.reload() 后为空 - 打包应用
chrome.storage.local.get empty after chrome.runtime.reload() - packaged app
我在我的应用程序中使用 chrome 存储,它运行良好。这个过程非常简单。用户输入电子邮件和密码,应用程序使用 XHR 请求验证它们并使用 chrome.storage.local.set
维护 session。设置 session 后,我使用 chrome.runtime.reload()
重新加载应用程序。在每次重新加载时,我都使用 checkLogin 函数来验证 session 是否处于活动状态。它工作正常。但是现在我收到了这个错误:
似乎是重新加载应用后存储变空,应用在存储中找不到关键字并返回未定义错误。
这里是用户通过身份验证后调用的代码:
postLogin = function (resultData) {
if (resultData.authStatus == 1) {
chrome.storage.local.set({'userData': resultData}, function(){
console.log("session saved");
});
chrome.runtime.reload()
}
else {
$("#result").html(resultData.authMsg);
$("#result").attr('style', 'display: inline-block !important');
}
return false
}
应用程序重新加载后,我检查保存的 session:
checkLogin = function () {
console.log(chrome.storage);
chrome.storage.local.get("userData",function(result) {
userData = result.userData;
if (userData && userData.authStatus == 1) {
console.log("--- user signed In ---")
return true;
}
console.log(" ---- unable to find user session ----")
$("#auth-dialog").attr('style', 'display: inline !important');
return false;
})
}
此时我收到上面屏幕截图中附加的错误。我还使用 console.log(chrome.storage);
来验证存储状态,它返回未定义。
奇怪的是,一旦我手动重新启动应用程序,代码的 .get
部分就可以正常工作。起初,它显示错误我必须重新加载页面才能获取存储的存储值。
清单:
{
...
"permissions": [ "unlimitedStorage", "clipboardRead", "clipboardWrite", "nativeMessaging" , "storage" ],
}
更新:
问题不在于 post 标题中提到的 chrome.storage
。 chrome.runtime.reload()
的主要问题。初始应用程序启动后,每当我调用 chrome.runtime.reload()
应用程序重新加载从 chrome.
开始的任何内容时,它都不起作用。
我还没有找到解决方案,但我找到了解决方法。我最初的假设是,在重新加载应用程序后 chrome.storage
不起作用,因为这是我的应用程序检查的第一件事。经过更多调试后,我发现每当我在应用程序重新加载从 chrome.
开始的任何内容时调用 chrome.runtime.reload()
都不起作用。问题在于重新加载应用程序 为了测试这一点,我已经从应用程序中删除了所有内容,只是一条显示清单详细信息的日志消息 console.log(chrome.runtime.getManifest())
和一个按钮 "Reload" 在它调用 chrome.runtime.reload()
的点击事件上。在初始应用程序启动时,一切正常,控制台日志消息显示清单详细信息。当我单击“重新加载”按钮并且应用程序重新加载时,它显示:
Uncaught TypeError: chrome.runtime.getManifest() is not a function
我尝试使用其他函数,如 chrome.storage.local.set/get
,但出现相同的未定义错误。
要解决此问题,解决方法是创建一个新的 window,而不是重新加载应用并关闭之前的应用。
chrome.app.window.create(
'main.html',
opt);
setTimeout(function () {
//close previous window
}, 300);
如果有人遇到同样的问题并找到了 better/cleaner 解决方法,请分享。
我在我的应用程序中使用 chrome 存储,它运行良好。这个过程非常简单。用户输入电子邮件和密码,应用程序使用 XHR 请求验证它们并使用 chrome.storage.local.set
维护 session。设置 session 后,我使用 chrome.runtime.reload()
重新加载应用程序。在每次重新加载时,我都使用 checkLogin 函数来验证 session 是否处于活动状态。它工作正常。但是现在我收到了这个错误:
似乎是重新加载应用后存储变空,应用在存储中找不到关键字并返回未定义错误。
这里是用户通过身份验证后调用的代码:
postLogin = function (resultData) {
if (resultData.authStatus == 1) {
chrome.storage.local.set({'userData': resultData}, function(){
console.log("session saved");
});
chrome.runtime.reload()
}
else {
$("#result").html(resultData.authMsg);
$("#result").attr('style', 'display: inline-block !important');
}
return false
}
应用程序重新加载后,我检查保存的 session:
checkLogin = function () {
console.log(chrome.storage);
chrome.storage.local.get("userData",function(result) {
userData = result.userData;
if (userData && userData.authStatus == 1) {
console.log("--- user signed In ---")
return true;
}
console.log(" ---- unable to find user session ----")
$("#auth-dialog").attr('style', 'display: inline !important');
return false;
})
}
此时我收到上面屏幕截图中附加的错误。我还使用 console.log(chrome.storage);
来验证存储状态,它返回未定义。
奇怪的是,一旦我手动重新启动应用程序,代码的 .get
部分就可以正常工作。起初,它显示错误我必须重新加载页面才能获取存储的存储值。
清单:
{
...
"permissions": [ "unlimitedStorage", "clipboardRead", "clipboardWrite", "nativeMessaging" , "storage" ],
}
更新:
问题不在于 post 标题中提到的 chrome.storage
。 chrome.runtime.reload()
的主要问题。初始应用程序启动后,每当我调用 chrome.runtime.reload()
应用程序重新加载从 chrome.
开始的任何内容时,它都不起作用。
我还没有找到解决方案,但我找到了解决方法。我最初的假设是,在重新加载应用程序后 chrome.storage
不起作用,因为这是我的应用程序检查的第一件事。经过更多调试后,我发现每当我在应用程序重新加载从 chrome.
开始的任何内容时调用 chrome.runtime.reload()
都不起作用。问题在于重新加载应用程序 为了测试这一点,我已经从应用程序中删除了所有内容,只是一条显示清单详细信息的日志消息 console.log(chrome.runtime.getManifest())
和一个按钮 "Reload" 在它调用 chrome.runtime.reload()
的点击事件上。在初始应用程序启动时,一切正常,控制台日志消息显示清单详细信息。当我单击“重新加载”按钮并且应用程序重新加载时,它显示:
Uncaught TypeError: chrome.runtime.getManifest() is not a function
我尝试使用其他函数,如 chrome.storage.local.set/get
,但出现相同的未定义错误。
要解决此问题,解决方法是创建一个新的 window,而不是重新加载应用并关闭之前的应用。
chrome.app.window.create(
'main.html',
opt);
setTimeout(function () {
//close previous window
}, 300);
如果有人遇到同样的问题并找到了 better/cleaner 解决方法,请分享。