解决微信返回上一页之后,页面不刷新

约定不等于承诺〃 2023-06-25 06:24 99阅读 0赞

问题描述: A页面跳转到B页面,在B页面进行了相关的操作之后,返回到A页面,A页面的数据没有刷新.具体实例:
由于项目中使用了vue,使用了gulp和普通的页面跳转。并没有引入vue-router。所以不能使用 watch监控$router。
微信公众号ios点击后退按钮,优选读取缓存,所以vue里的生命周期不会在进行调用。
所以项目中执行隐藏分享qq,空间。等功能不被再次执行。

原因分析:
一.android 浏览器 包括微信的开发者工具 都是ok的返回可以刷新页面但是唯有iOS不行.
二.iOS 浏览器原因:history.go(-1)返回上一页后,页面内容并不会刷新。在B页面修改的内容,返回到A时并没有更新新的内容,必须手动刷新。
在Debug模式下,发现在iOS浏览器中,返回上一页后,页面的 JS 代码并未执行。我们猜测可能是缓存引起的,于是使用 meta 禁止了缓存,但仍然没有效果。于是进一步猜测可能是浏览器内部机制导致——iOS为了提升浏览网页的效率,可能给已浏览过的网页添加一个类似快照的东西,当点击返回按钮后,直接调用快照展示给用户,省去了执行JS这一步骤(纯静态文件依然被缓存)。这本来是iOS的优势,在这却变成了bug存在的风险.
三.页面数据是通过 ajax 请求后台数据,通过链接跳到下一页,然后返回,
最常用的返回上一页的方法:history.go(-1)和 history.back(),
在 android 中正常显示上一页,但是在 iOS 中不能正常显示,通过打印
返回的数据,发现数据是上一个页面最后请求的数据。
解决方法:
在回退后需要刷新的页面加以下js:

  1. $(function () {
  2. var isPageHide = false;
  3. window.addEventListener('pageshow', function () {
  4. if (isPageHide) {
  5. window.location.reload();
  6. }
  7. });
  8. window.addEventListener('pagehide', function () {
  9. isPageHide = true;
  10. });
  11. })

将上边的代码写在A页面的js文件中
即可实现想要的效果.如下不需要手动刷新就可以实现

作者:上善_若水
链接:https://www.jianshu.com/p/b5c…
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

备注:我的项目代码

  1. window.localStorage.removeItem ("openIdItem");
  2. window.localStorage.removeItem ("foodMatchtype");
  3. window.localStorage.removeItem ("peicaned");
  4. // window.localStorage.removeItem ("userInfoNeed");
  5. window.localStorage.setItem("openIdItem",JSON.stringify(getUrlParam("openId")))
  6. var openIdItem = window.localStorage.getItem("openIdItem")
  7. window.localStorage.setItem("foodMatchtype",JSON.stringify("5"))
  8. new Vue({
  9. el: "#containerBox",
  10. data: {
  11. imageUrl:"",
  12. planInfos:[],
  13. mealInfos:[],
  14. advantageInfos:[],
  15. proEndorsement:[],
  16. userInfoNeed:{},
  17. appScope:"",//人群范围
  18. planName:"",//方案名称
  19. isContentShow:false,//content内容默认不显示
  20. chanType: "fwh",
  21. url: location.href,
  22. openId:""
  23. },
  24. created(){
  25. },

发表评论

表情:
评论列表 (有 0 条评论,99人围观)

还没有评论,来说两句吧...

相关阅读