我需要将我的会话令牌保存在localStorage
中,以便在用户重新加载页面时取回它:
window.addEventListener('beforeunload', this.savetoken.bind(this));
window.addEventListener('unload', this.savetoken.bind(this));
function async savetoken() {
const token_ = await this.getToken();
localStorage.setItem('sbk:token', token_);
console.log('token saved in storage!!!', token_);
}
在桌面版Chrome中,这是完美的,但在移动的版本(Android Chrome 85)中,unload/beforeunload事件不会在关闭浏览器或标签时被触发,它只在刷新页面时起作用。
有办法解决这个问题吗?
1条答案
按热度按时间nwwlzxa71#
正如https://developer.chrome.com/blog/page-lifecycle-api/#the-unload-event所说
许多开发人员将
unload
事件视为有保证的回调,并将其用作会话结束信号来保存状态和发送分析数据,但这样做非常不可靠,特别是在移动的上!unload
事件在许多典型的卸载情况下都不会触发,包括从移动的上的选项卡切换器关闭选项卡或从应用切换器关闭浏览器应用。您可以尝试
visibilitychange
和/或pagehide
事件来保存数据。作为后备,您可以定期保存数据,例如:一分钟一次通过setInterval()
。