• 微信浏览器跳转页面后再返回,如何恢复到跳转前的位置的问题。


    以商品列表页打比方,

     

    众所周知,点击商品进入详情页要保证不损坏当前列表页状态的做法通常是在a标签上加上target=_blank进行新开一个窗口打开详情页

     

    这个做法是非常普遍的,包括很多很多牛叉的网站都是这么玩的。

     

    但是在微信浏览器里行不通  因为微信浏览器只有一个窗口   无论任何形式的跳转它都会销毁当前窗口的内容链接新的页面

     

    所以不管是什么target=_blank啊还是什么history.go(-1)啊  统统都会强制刷新重新渲染页面

     

    因为我是干PHP的,所以面对这个问题第一想到的就是用cookie去缓存,但是总觉得怪怪的,因为cookie的定位是存储零散少量数据。

     

    最终找到的解决办法是使用HTML5的缓存功能

     

    localStorage  不限时的存储  除非用户手动清理

    sessionStorage  与会话绑定 会话结束 数据消失  相比之下直接无视localStorage

     

    HTML5的缓存与cookie相比它可以存储10M数据在客户端,不同浏览器可存储的大小有所差异,但都是cookie无法望其项背的。

    当然,它不如cookie的便利之处是它无法与服务端进行交互。

     

    然并卵

    我就是需要它:

    sessionStorage.getItem(key):获取指定key本地存储的值

    sessionStorage.setItem(key,value):将value存储到key字段

    sessionStorage.removeItem(key):删除指定key本地存储的值

    sessionStorage.clear();删除所有

     

    列表页的跳转a标签就直接做成 href="javascript:void(0)"  onclick="go(url)" 

    点击进入下面方法进行存储  存好之后再跳转

        function go(url){
            sessionStorage.setItem('index_list',$("#wrapper").html());//存储列表数据
            sessionStorage.setItem('index_page',page);//存储页码
            sessionStorage.setItem('index_scroll',$(window).scrollTop());//存储滚动条位置
            window.location.href = url;
            return false;
        }
    

    因为我做的列表加载效果是每次取出20条数据  每次展现5条  屏幕每次下滑到底就加载5条  

    当20条数据都加载完之后再下滑到底 就ajax请求服务器再取20条过来  再每次5条的给用户加载

    我感觉这么做用户体验非常快  至少用户觉得非常快  

    有了ajax的加入  自然要把页码一起存储   

     

    下面是页面初始化进行判断,如果有缓存,则使用缓存,赋值页码,恢复滚动条位置。之后删除缓存以免造成污染。

    如果没有缓存则走正常流程。

            var l = sessionStorage.getItem('index_list');
    
            if(null !== l && '' !== l){
    
                //恢复数据
                $("#wrapper").html(l);
                $(window).scrollTop(sessionStorage.getItem('index_scroll'));
                page = sessionStorage.getItem('index_page');
    
                //删除缓存
                sessionStorage.removeItem('index_list');
                sessionStorage.removeItem('index_scroll');
            }else{
                p = {$data|json_encode};
                showData();
            };
    

      

  • 相关阅读:
    javaWeb学习笔记之关于重定向和请求转发的区别
    javaWeb学习笔记之关于Servlet文件下载
    javaWeb学习笔记之关于http
    javaWeb学习笔记之关于tomcat
    小程序订阅消息推送
    Oracle数据库序列的相关问题
    将本地项目push到gitlab仓库中
    面试之BI-SQL--table转换[2]
    面试之BI-SQL--table转换
    面试之C#--垃圾回收器什么时候回收?
  • 原文地址:https://www.cnblogs.com/fengyumeng/p/7173072.html
Copyright © 2020-2023  润新知