chrome.runtime.reload()之后chrome.storage.local.get为空 - 打包应用

时间:2017-10-18 07:28:20

标签: local-storage google-chrome-app

我在我的应用程序中使用chrome存储工作正常。这个过程非常简单。用户输入电子邮件和密码,应用程序使用XHR请求验证它们并使用chrome.storage.local.set维护会话。设置会话后,我使用chrome.runtime.reload()重新加载应用。在每次重新加载时,我使用checkLogin函数来验证会话是否处于活动状态。它工作正常。但现在我收到了这个错误:

enter image description here

重新加载应用程序后,存储空间似乎变空,应用程序无法在存储中找到关键字并返回未定义的错误。

这里是用户通过身份验证后调用的代码:

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
}

重新加载应用后,我会检查已保存的会话:

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);来验证存储状态,并返回undefined。 奇怪的是,一旦我手动重新启动应用程序,.get部分代码就可以正常工作。首先,它显示错误我必须重新加载页面才能获得存储的存储值。

清单:

{
  ...
  "permissions": [ "unlimitedStorage", "clipboardRead", "clipboardWrite", "nativeMessaging" , "storage" ],
}

更新

问题不在于帖子标题中提到的chrome.storagechrome.runtime.reload()的主要问题。在初始应用启动后,只要我在应用重新加载从chrome.runtime.reload()开始的任何内容后立即致电chrome.,就无效。

1 个答案:

答案 0 :(得分:2)

我还没有找到解决方案,但我找到了解决方法。我最初的假设是,重新加载应用chrome.storage之后无法正常工作,因为这是我的应用检查的第一件事。经过一些调试后,我发现只要应用程序从chrome.runtime.reload()开始重新加载任何内容,我就会调用chrome.。问题在于重新加载应用程序为了测试这一点我已经从应用程序中删除了所有内容,只显示了一条显示清单详细信息console.log(chrome.runtime.getManifest())和一个按钮的日志消息"重新加载"点击事件,它调用chrome.runtime.reload()。在初始应用程序启动时,一切正常,控制台日志消息显示清单详细信息。当我单击“重新加载”按钮并重新加载应用程序时,显示:

  

未捕获的TypeError:chrome.runtime.getManifest()不是函数

我尝试使用其他函数,例如chrome.storage.local.set/get,但具有相同的未定义错误。

要解决此问题,解决方法是创建一个新窗口,而不是重新加载应用程序并关闭上一个应用程序。

chrome.app.window.create(
    'main.html',
    opt);
setTimeout(function () {
    //close previous window
}, 300);

如果有人遇到同样的问题并找到了更好/更清洁的解决方法,请分享。