如何区分location.reload()和用户主动刷新页面?

希望达到下面的效果,项目中主动调用location.reload()时,不清空sessionStorage的值。

用户刷新的时候,需要清空sessionStorage的值

要怎么实现呢?

阅读 2.4k
3 个回答

在调用 location.reload() 之前,弄一个标记:

sessionStorage.setItem('reloaded', 'true');
location.reload();
if (sessionStorage.getItem('reloaded')) {
  sessionStorage.removeItem('reloaded');
} else {
  sessionStorage.clear();
}
新手上路,请多包涵

要区分调用 location.reload() 和用户主动刷新页面,可以使用浏览器的 window.performance.navigation.type 属性来判断。这个属性会告诉你当前页面的导航类型,包括用户点击链接、用户按下前进或后退按钮、用户在地址栏中输入 URL、页面刷新等等。其中,导航类型为 0 表示用户通过点击刷新按钮或者按下 F5 键来刷新页面,而导航类型为 1 表示使用 location.reload() 方法刷新页面。

if (window.performance.navigation.type === 0) {
  // 用户刷新页面,清空 sessionStorage
  sessionStorage.clear();
} else if (window.performance.navigation.type === 1) {
  // 代码调用 location.reload(),不清空 sessionStorage
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏