详解如何探测小程序返回到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 相关文章推荐
javascript实现网页字符定位的方法
Jul 14 Javascript
动态更新highcharts数据的实现方法
May 28 Javascript
jQuery Ztree行政地区树状展示(点击加载)
Nov 09 Javascript
js编写三级联动简单案例
Dec 21 Javascript
分享bootstrap学习笔记心得(组件及其属性)
Jan 11 Javascript
基于webpack.config.js 参数详解
Mar 20 Javascript
layer插件select选中默认值的方法
Aug 14 Javascript
小程序scroll-view安卓机隐藏横向滚动条的实现详解
May 16 Javascript
Vue 自定义指令功能完整实例
Sep 17 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
js实现无缝轮播图特效
May 09 Javascript
JavaScript数组常用的增删改查与其他属性详解
Oct 13 Javascript
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
全国FM电台频率大全 - 3 河北省
2020/03/11 无线电
PHP-MySQL教程归纳总结
2008/06/07 PHP
PHP中source #N问题的解决方法
2014/01/27 PHP
js 提交和设置表单的值
2008/12/19 Javascript
Prototype ObjectRange对象学习
2009/07/19 Javascript
onclick与listeners的执行先后问题详细解剖
2013/01/07 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
JavaScript动态添加列的方法
2015/03/25 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Jquery检验手机号是否符合规则并根据手机号检测结果将提交按钮设为不同状态
2015/11/26 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
2015/11/27 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
react学习笔记之state以及setState的使用
2017/12/07 Javascript
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
图片文字识别(OCR)插件Ocrad.js教程
2018/11/26 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
Python 可爱的大小写
2008/09/06 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
如何利用python制作时间戳转换工具详解
2018/09/12 Python
对Python中Iterator和Iterable的区别详解
2018/10/18 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
Python使用修饰器进行异常日志记录操作示例
2019/03/19 Python
python实现智能语音天气预报
2019/12/02 Python
澳大利亚网上书店:QBD
2021/01/09 全球购物
大学生个人总结的自我评价
2013/10/05 职场文书
党员公开承诺书范文
2014/03/25 职场文书
党员岗位承诺口号大全
2014/03/28 职场文书
六年级学生评语大全
2014/12/26 职场文书
介绍信格式样本
2015/05/05 职场文书
Javascript 解构赋值详情
2021/11/17 Javascript