7***@qq.com
7***@qq.com
  • 发布:2016-12-28 17:45
  • 更新:2019-06-03 11:20
  • 阅读:5063

MUI在第二次打开预加载的webview时,怎么让其重新回到顶部?

分类:MUI

大家好,我有许多商品的主页A,和预加载的商品详情共用页B。

点击商品1,则跳转到预加载的详情页B中显示,在返回A时,由于B是预加载的,MUI在处理机制上是将B隐藏了。

重点来了!
当我返回主页A并点击商品2时,再次被打开的页面B居然(自然)还是在上次我浏览商品1的地方。
但我想要的效果是,每一次打开页面B时,都是在顶部的。

试过的方法

  • 页面B重写mui.back(),reload自己,但是会影响返回。
  • 页面B重写mui.back(),mui.currentWebview.opener().reload(); 返回A后会回到顶部(正是我要的效果),但它不应该出现在A,而是B……

找了一圈,只找到如果预加载,却没有找到预加载后该怎么处理类似这样的问题,寻求大家帮助,谢谢。

页面A相关代码

/******页面预加载*******/  
var good_content = mui.preload({  
                    url: 'content/good_content.html',  
                    id: 'good_content.html'  
                });  
/*****进入商品详情页*******/  
function browseGood(good_content) {  
    mui("#good").on('tap', 'a', function() {  
            if(!good_content) {  
                alert('不存在订单详情页');  
            } else {  
                console.log(JSON.stringify(good_content));  
            }  
            var goodId = this.querySelector('h4').title;  
            console.log("你已经点击了商品"   goodId);  
            //定义商品详情页面  

            mui.fire(good_content, 'goodIdtran', {  
                'goodId': goodId  
            });  

            mui.openWindow({  
                id: 'good_content.html',  
            });  
        })  

页面B相关代码

    mui.plusReady(function() {  

            var vmGoodContent = new Vue({  
                el: '#goodContent',  
                data: {  
                    goodSeekItems: {}  
                },  
                methods: {  
                    //AJAX获取用户点击的商品信息  
                    getContentByGoodId: function(goodId) {  
                        console.log('这是vue的'   goodId);  
                        ajaxGoodContent(goodId, this);  
                    }  
                }  
            });  
            window.addEventListener('goodIdtran', function(e) {  
                var goodId = e.detail.goodId;  
                console.log("内容页面已接受商品"   goodId);  
                vmGoodContent.getContentByGoodId(goodId); //根据id向服务器请求商品详情  
            });
2016-12-28 17:45 负责人:无 分享
已邀请:
DCloud_UNI_CHB

DCloud_UNI_CHB

重写B页面的back实现,在B页面隐藏后延时重新初始化,或者reload自己(注意应该reload自己而不是reload opener)

例如:

mui.back = function(){  
        var _self = plus.webview.currentWebview();  
    _self.hide();  
    setTimeout(function() {  
        _self.reload();//重新加载  
    }, 300);  
}
  • 7***@qq.com (作者)

    您好,通过您的指点,我在reload前加了hide,但是……

    重载之后,仍然还是在原有的位置,并不会回到顶部。为此自己还用其他webview做了一个小案例测试reload,也还是不能够是其刷新…………我在怀疑是自己使用vue影响到了webview吗?

    2016-12-29 20:08

  • 7***@qq.com (作者)

    回复 7***@qq.com: 或者,在实际开发中,有没有更好的解决方案?

    2016-12-29 20:22

逗逗水

逗逗水

请问最终如何解决呐?

  • 五叶神

    window.scrollTo(0,0);

    2017-08-29 17:30

  • 逗逗水

    这个页面是可以直接滚动到顶部,但是页面中的标签仍旧是第一次打开时的状态

    2017-08-29 17:37

逗逗水

逗逗水


比如第一次打开了页面菜单标签中的第二个标签,使用window.scrollTo(0,0);页面虽然可以到顶部,但是该标签没有切换成第一次打开时默认(打开第一个标签)状态。

  • 五叶神

    http://ask.dcloud.net.cn/article/12742

    2017-08-29 17:54

  • 五叶神

    或者数据加载的时候直接替换mui-content中的全部内容

    2017-08-29 17:56

五叶神

五叶神 - 世界上没有免费的午餐,也不要有一颗贪婪的心

那你就写个reset方法, beforeback重置不就行了,(http://ask.dcloud.net.cn/article/12742,处理预加载页面参考)

千秋忆梦

千秋忆梦

在mui的beforeback中加入window.scrollTo(0,0)。下一次进入预加载的页面,并没有回到最顶部,这是什么原因?

该问题目前已经被锁定, 无法添加新回复