详解如何探测小程序返回到webview页面


Posted in Javascript onMay 14, 2019

在公司项目中经常会遇到一个场景, 尝试过各种不同的方法, 最后想到了一种很技术上简单且可行的方法.

经常被QA同学反应同一类型的问题

项目是小程序(wepy), 部分页面使用webview(vue). 经常会遇见一个场景: 当小程序navigateTo到一些页面对用户的"收藏状态", "身材细节"做了修改后, 用户点击返回按钮回到上一个页面, 收藏的状态或是身材细节没有改变.

那是当然的, 作为一个小程序中的webview, api相当有限, 没有一个事件可以让网页触发重新渲染动作, 轮询更是不理智的表面功夫.

我们试过绑定blur和click事件来模拟事件, 试过从业务逻辑上加入一些时间点检查状态, 最后才想到个技术简单, 操作简单的解决方案.

解决方法

第一步, 在小程序webview绑定的url上加上时间戳.

<web-view src="{{url}}"/>
onShow () {
 this.url = ${base_url}?ts=Date.now()
}

第二步, 在html里监听query变化. 我遇到问题的项目使用的是vue.

watch: {
  '$route.query.ts': function () {
  this.fetchData()
  this.patchRender() // 获取数据, 重新渲染变化的部分
  }
 }

这样就解决了触发退回到webview的事件探测问题, 剩下的只要根据业务来重新渲染可能变化的部分就行了.

更多

小程序的部分每次都需要改变url的query参数没有办法, 但是对vue设计这么良好的框架还有一定改良空间.

我们可以把这串代码写到mixin里, 对性能有些小影响, 但方法没写也不会去执行, 只是在不需要的页面上多了个observer.

Vue.use(function () {
 Vue.mixin({
 watch: {
  '$route.query.ts': function () {
  this.$options.onShow && this.$options.onShow.call(this)
  }
 }
 })
})

那么在vue页面中就省去了写watch的麻烦, 直接像小程序那样写onShow方法就行了.

onShow () {
 this.fetchData()
 this.patchRender() 
 },
 methods: {
 fetchData () {//...}
 }

总结, 使用了这个方法如需再添加需要探测onShow事件的页面, 只需要:

小程序webview的url在onShow的时候修改ts参数

在vue文件里添加onShow方法, 进行业务操作. (方法里的this是正常指向vm的)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
使用Microsoft Ajax Minifier减小JavaScript文件大小的方法
Apr 01 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
Dec 14 Javascript
java和javascript获取word文档的书签位置对比
Jun 19 Javascript
Highcharts入门之简介
Aug 02 Javascript
jQuery EasyUI Tab 选项卡问题小结
Aug 16 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
Oct 27 Javascript
bootstrap模态框消失问题的解决方法
Dec 02 Javascript
JS简单获取当前年月日星期的方法示例
Feb 07 Javascript
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
JS数组的常用10种方法详解
May 08 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
Apr 30 Vue.js
JQuery获取元素尺寸、位置及页面滚动事件应用示例
May 14 #jQuery
javascript实现遮罩层动态效果实例
May 14 #Javascript
JQuery animate动画应用示例
May 14 #jQuery
微信小程序的线程架构【推荐】
May 14 #Javascript
jquery实现选项卡切换代码实例
May 14 #jQuery
Vue表单之v-model绑定下拉列表功能
May 14 #Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
May 14 #jQuery
You might like
利用PHP创建动态图像
2006/10/09 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
按上下级层次关系输出内容的PHP代码
2010/07/17 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
9个JavaScript评级/投票插件
2010/01/18 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
5 种JavaScript编码规范
2018/01/30 Javascript
vue cli 全面解析
2018/02/28 Javascript
详解webpack-dev-server的简单使用
2018/04/02 Javascript
js实现图片上传并预览功能
2018/08/06 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
python中base64加密解密方法实例分析
2015/05/16 Python
python多进程共享变量
2016/04/06 Python
Python之父谈Python的未来形式
2016/07/01 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
python实现二维数组的对角线遍历
2019/03/02 Python
学习python分支结构
2019/05/17 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
python实现连连看游戏
2020/02/14 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
如何利用python web框架做文件流下载的实现示例
2020/06/02 Python
python线程优先级队列知识点总结
2021/02/28 Python
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
银行实习生的自我评价
2013/12/09 职场文书
会计专业求职信范文
2014/03/16 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
python标准库ElementTree处理xml
2022/05/20 Python