详解如何探测小程序返回到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 相关文章推荐
制作特殊字的脚本
Jun 26 Javascript
javascript编程起步(第三课)
Feb 27 Javascript
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 Javascript
Jquery优化效率 提升性能解决方案
Sep 06 Javascript
javascript使用avalon绑定实现checkbox全选
May 06 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
Oct 01 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
ionic2自定义cordova插件开发以及使用(Android)
Jun 19 Javascript
Node.js 的模块知识汇总
Aug 16 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
解决vue prop传值default属性如何使用,为何不生效的问题
Sep 21 Javascript
vue使用Google Recaptcha验证的实现示例
Aug 23 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 取得瑞年与平年的天数的代码
2009/08/10 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
php简单生成随机数的方法
2015/07/30 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
js 父窗口控制子窗口的行为-打开,关闭,重定位,回复
2010/04/20 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
使用Jquery获取带特殊符号的ID 标签的方法
2014/04/30 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
$.extend 的一个小问题
2015/06/18 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
JS数组去掉重复数据只保留一条的实现代码
2016/08/11 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
vue-router的两种模式的区别
2019/05/30 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
python操作excel的方法
2018/08/16 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
2019/07/04 Python
对Python函数设计规范详解
2019/07/19 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
2020/04/22 Python
购房个人委托书范本
2014/10/11 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
紧急迫降观后感
2015/06/15 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
导游词之澳门玫瑰圣母堂
2019/12/03 职场文书
几款流行的HTML5 UI框架比较(小结)
2021/04/08 HTML / CSS
铁拳制作人赞《铁拳7》老头环Mod:制作精良 但别弄了
2022/04/03 其他游戏