背景

最近项目需要适配小程序,项目是使用了vue开发的网站,其中改造方式是,每个页面都使用小程序创建一个页面通过web-view来显示指定页面的。

在没有使用小程序时,路由跳转时,刷新页面等等,这个是很顺畅的,在使用了小程序之后,需要适配小程序的页面,比如后退到前一页,这个时候要刷新页面,于是遇到了小程序的一些特性。

问题描述

有两个页面:A=http://demo.com/#/A?code=12,B=http://demo.com/#/B?index=2
有这这么一个需求,A页面跳到B页面,B页面把一些处理后的结果以参数的形式传给A页面。例如:B页面的使用了wx.navigateBack(其它跳转函数同理),且url(http://demo.com/#/A?code=12&index=12)以参数的形式传给了A页面,A页面在OnShow方法里面重新设置了web-view的src地址,能保证正确,但是页面就是不刷新,且使用微信开发者工具,能看到src已经被改变了。

尝试解决

在网上找的一些方法:

  1. 比如先设置src为空字符串,然后再通过setTimeout设置src为期望的值,且要设置时间为60ms以上(玄学),这个方法之前我还真解决了一个问题,不过那个场景是:A是一个web-view页面,B是一个小程序页面,B返回A时,通过给A传递参数,设置src可以通过此方法正确显示。

此方法但是没有解决,A、B页面都是web-view的形式。

  1. 在B页面先把A页面的src设置为空,然后再直接设置为需要的url,此方法依然对本问题无效

  2. 我把1、2两种方案结合也没有解决。

  3. 最小化正确原型
    这个时候,我在思考,这个页面到底能不能正常刷新,注意这个想法非常的重要,我用了最小正确原型来先验证,能否正确得到期望,最小原型如下:
    A的页面web-view src=https://baidu.com,然后打开看一下,可以正常显示页面,之后在B页面返回A页面时,给A页面传递了一个url,在A页面OnShow里面设置了A的src=https://www.qq.com,结果页面刷新了,正确的显示了www.qq.com页面,也就是说不需要什么settimeout

之后反复测试,同样的连接是不刷新的;设置为空是不刷新的。

这个时候,已经找到了可以正常刷新的条件,不是原链接、不是空,都可以刷新页面,那么问题来了,A页面的链接都已经变了,后面的参数变了,怎么还跟缓存了一样(同一个get链接,会被缓存起来的)。

  1. 再分析原始的A的链接
    从http://demo.com/#/A?code=12,变成了http://demo.com/#/A?code=12&index=12,这个形式,改变够大了,但是还是缓存了,这个时候应该就是缓存策略问题了,毕竟以前解决ie浏览器时,我们通过添加url随机数就可以避免。

注意到了吗?vue页面中使用了#作为路由判断的,而#在浏览器中是作为锚点使用的,是不是小程序对这个解析也有差别,认为是同一个页面,于是做了如下的测试:
http://demo.com/?code=12&index=12/#/A

结果,参数放到#之前,小程序果然刷新了,看来小程序对#就是按照同一个页面解析的,好了刷新的问题解决了,下来看看vue是否能正确识别参数

使用了this.$route.query.index的值,成功取得了值。

最后

自此问题得以解决,总结如下:

  1. 网上的很多解决方法适用场景可能跟你的不一样;
  2. 黔驴技穷时,使用最小正确原型开始验证期望;
  3. 找到差异的地方,或者特殊的地方可能就是问题所在;
  4. 懂原理、机制能事半功倍快速解决问题
  5. 小程序还可以提升的更好,比如方案1真的有效,要不是之前第一版迁移方案我遇到过,我都觉得这个是开玩笑的方法

直击--vue项目微信小程序页面跳转web-view不刷新-根源的更多相关文章

  1. 微信小程序页面跳转方法总结

    微信小程序页面跳转目前有以下方法(不全面的欢迎补充): 1. 利用小程序提供的 API 跳转: // 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面.// 注 ...

  2. 微信小程序-页面跳转与参数传递

    QQ讨论群:785071190 微信小程序页面跳转方式有很多种,可以像HTML中a标签一样添加标签进行跳转,也可以通过js中方法进行跳转. navigator标签跳转 <view class=& ...

  3. 微信小程序——页面跳转及传参

    小程序页面跳转 微信小程序的页面跳转依然是以传统的请求转发和请求重定向为主,tabbar的存在,有TAB页面的跳转. 为了微信小程序的简介方便,规定页面路径只能是十层,应尽量避免过多的交互方式. 1. ...

  4. 微信小程序页面跳转后js定时器没有销毁的问题

    现在有一个小程序,对页面数据的实时性很强,本来想用socket,仔细研究了一下,万剑不离其中,它是websocket.服务端不会用,所以使用了传统的http请求方式.开发微信小程序必须要知道的事 1. ...

  5. 微信小程序页面跳转导航wx.navigateTo和wx.redirectTo

    }) wx.redirectTo(OBJECT) 关闭当前页面,跳转到应用内的某个页面. 还是用上面的三张图示作为例子,当使用wx.redirctTo接口跳转页面时,原来的页面将被删除掉,当然,这是小 ...

  6. 微信小程序页面跳转 的几种方式

    最近在做微信小程序,碰到页面跳转的问题,总结一下页面之间跳转的方式 一.wx.navigateTo(OBJECT) 这是最普遍的一种跳转方式,其官方解释为:“保留当前页面,跳转到应用内的某个页面” 类 ...

  7. 微信小程序页面跳转方法汇总

    微信小程序前端页面跳转有多种方式,汇总如下: Tips: 小程序前端的页面跳转之后,跳转之前的页面并不会凭空消失,而是存进了一个类似“页面栈”的空间里: 只有当这个所谓的“页面栈”满了之后页面才会退出 ...

  8. [转] 微信小程序 页面跳转 传递参数

    本文转自:http://blog.csdn.net/qq_31383345/article/details/52795212 微信小程序的页面跳转,页面之间传递参数笔记. CSDN微信小程序开发专栏, ...

  9. 微信小程序页面跳转的三种方式总结

    原文链接 https://blog.csdn.net/zgmu/article/details/72123329 首先我们了解到,小程序规定页面路径只能有五层,所以我们尽量避免多层级的页面跳转 页面跳 ...

随机推荐

  1. 为什么QQ能上却打不开网页呢?

    互联网是一个复杂又有趣的玩意儿,接下来我来分享一个案例: 网页打不开,但奇怪的是QQ可以正常使用??? 网页打不开的原因:电脑上Tcp/IP设置中没有使用自动分配的DNS服务器,而且自行设定的DNS服 ...

  2. 数字IC前后端设计中的时序收敛(四)--Max Capacitance违反的修复方法

    本文转自:自己的微信公众号<数字集成电路设计及EDA教程> 里面主要讲解数字IC前端.后端.DFT.低功耗设计以及验证等相关知识,并且讲解了其中用到的各种EDA工具的教程. 考虑到微信公众 ...

  3. (转)代码结构中Dao,Service,Controller,Util,Model是什么意思?

    作者:技能树IT修真院链接:https://www.zhihu.com/question/58410621/answer/623496434来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商 ...

  4. 工作经验之石氏thinking

    经常听到N多人说工作经验这个名词:也时常听到人说工作多少年就是多少年工作经验.我听着总觉得有点别扭,感觉他们把这个名词说的太简单了,而且觉得不是工作N年就一定有所谓的工作经验.我觉得归根结底还是在于工 ...

  5. WinForm控件之【ComboBox】

    基本介绍 下拉文本框应用较为广泛,在winfrom控件当中使用设置也是相对的简单,主要用于存在多种选择的单选操作场景. 常设置属性.事件 DataSource:绑定加载项的数据源,设置属性Displa ...

  6. HashSet源码分析:JDK源码系列

    1.简介 继续分析源码,上一篇文章把HashMap的分析完毕.本文开始分析HashSet简单的介绍一下. HashSet是一个无重复元素集合,内部使用HashMap实现,所以HashMap的特征耶继承 ...

  7. 个人永久性免费-Excel催化剂功能第21波-Excel与Sqlserver零门槛交互-执行SQL语句篇

    在前两波中,已完成了Excel与Sqlserver的查询和上传功能,但难免许多临时的或更深入地操作数据库需要用Sql语句来操作,对一般用户电脑里,不可能有条件轻易安装一个数据库客户端软件,就算安装了对 ...

  8. Word公式显示为{EMBED Equation.DSMT4}

    具体问题表现为: 添加了Mathtype公式后显示为{EMBED Equation.DSMT4}, 超链接显示为大花括号和描述文本, 页码显示为​ page... 具体解决方法如下,(以Office2 ...

  9. Uncaught ReferenceError: xxx is not defined 解决办法

    VM11371:1 Uncaught ReferenceError: inputSize is not defined    at <anonymous>:1:1 解决办法(根据需求调整) ...

  10. 基于 Github 存储附件的 wordpress 插件

    前言 插件名称 wp-github-gos, 本插件核心功能使用了 GitHub API 设置页面和核心业务逻辑主要参考插件 wordpress-qcloud-cos 的实现,替换了其中 腾讯云 CO ...