history怎么判断有没有上一页?

新弹出窗口可以用history.length来判断,但是如果有历史记录,已经返回到当前页,怎么判断没有上一页?

阅读 12.5k
2 个回答

前言

使用单页面的话 document.referrer 会一直为空(.html或者ssr网页则存在值)

History.length 表示用户历史会话页面的数量。当用户从新的标签页或框架载入页面其值为“1”,每访问一个页面该值增加“1”。
因为history.length 的数量只增不减,根本不能拿来做判断。

场景

需要判断用户从微信浏览器通过浏览器打开当前网页,如果是则当用户点击返回按钮时返回到web应用(站点)首页

  • 或:是否有前一页

    • 通过history.length

      • 不准确,如果用户曾经打开过,则会存在更多的history.length
      • 如果用户不曾打开过,且直接从微信浏览器再使用系统浏览器打开,则history.length === 1(其中手机浏览器中为1,chrome控制台为2)
  • 或:判断用户是否访问过

  • 或:判断 history 中是否存在指定url

    • 没有找到相关方法
  • 或:是否是通过微信浏览器唤醒设备浏览器再打开到当前网页的

    • 没有找到相关方法

肯定还有其他方法实现 当用户点击返回按钮时返回到web应用(站点)首页 这个功能的,现在脑袋有点晕,如果有的话,也希望能得到分享,非常感谢。
对了,Vuex能否判断呢?实在是没有找到相关方法,或许有。

还有

别忘记监听浏览器的返回事件啦 :

window.addEventListener("popstate", function(e) {
  alert("我监听到了浏览器的返回按钮事件啦");//根据自己的需求实现自己的功能
}, false);

我是如何解决的

[狗头]
当用户在微信中打开web应用(站点)时,则提示用户使用浏览器打开;
再配合 Cookie和sessionStorage 缓存了router记录来判断用户点击返回按钮时是否需要直接回到home页;

document.referrer === ''

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题