详解如何探测小程序返回到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高级程序设计 阅读笔记(十三) js定义类或对象
Aug 14 Javascript
JQuery的$命名冲突详细解析
Dec 28 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
Mar 17 Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
Bootstrap每天必学之折叠
Apr 12 Javascript
8 行 Node.js 代码实现代理服务器
Dec 05 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
xmlplus组件设计系列之下拉刷新(PullRefresh)(6)
May 03 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
Dec 13 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
vuex存储token示例
Nov 11 Javascript
基于javascript实现移动端轮播图效果
Dec 21 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
php,ajax实现分页
2008/03/27 PHP
linux下删除7天前日志的代码(php+shell)
2011/01/02 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
在WordPress的文章编辑器中设置默认内容的方法
2015/12/29 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
bootstrap制作jsp页面(根据值让table显示选中)
2017/01/05 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
Vue中fragment.js使用方法详解
2017/03/09 Javascript
微信小程序注册60s倒计时功能 使用JS实现注册60s倒计时功能
2017/08/16 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
Node.js API详解之 os模块用法实例分析
2020/05/06 Javascript
Django Highcharts制作图表
2016/08/27 Python
Python创建xml文件示例
2017/03/22 Python
python3.6+django2.0开发一套学员管理系统
2018/03/03 Python
Python语法分析之字符串格式化
2019/06/13 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
python里的单引号和双引号的有什么作用
2020/06/17 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
H5 video poster属性设置视频封面的方法
2020/05/25 HTML / CSS
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
党员思想汇报范文
2013/12/30 职场文书
接待员岗位责任制
2014/02/10 职场文书
学雷锋活动总结报告
2014/06/26 职场文书
2014年医生工作总结
2014/11/21 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
复兴之路观后感3000字
2015/06/02 职场文书
楚门的世界观后感
2015/06/03 职场文书
高温慰问简报
2015/07/21 职场文书
员工旷工检讨书
2015/08/15 职场文书
Mysql中常用的join连接方式
2022/05/11 MySQL