您现在的位置是:首页> 编程文章 个人博客模板
小程序webview使用
无痕小Q个人博客 2020-02-05 22:42:49【 主页】 1390人已围观
简介一、使用原因 由于小程序包大小8M的限制 (之前版本) 我们组做的是公共活动、工具,业务方会拉取我们的代码, 新活动会不断添加 H5小程序都做,维护成本会比较高
一、使用原因
- 由于小程序包大小8M的限制 (之前版本)
- 我们组做的是公共活动、工具,业务方会拉取我们的代码, 新活动会不断添加
- H5小程序都做,维护成本会比较高
二、webview引入思路
- webview 安全域名申请
- 访问原先小程序活动重定向到webview容器页面并且在url后面追加一些参数(h5页面需要)
- 实现公共的webview页面,需要功能:分享回调、h5路径转发、身份token透传、刷新H5页面
- H5页面实现功能兼容, 一些活动配置项、分享标题、分享图片、打点(跟小程序和h5环境相关)
三、代码实现
原小程序页面重定向webview页面方法包装
小程序webview代码实现
Page({ /** * 页面的初始数据 */ data: { url: '', // webview 地址 shareData: {}, // 分享参数 }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // TODO 登录信息获取 }, /** * 用户点击右上角分享 */ onShareAppMessage: function (options) { // 这里把网址编码了下,用户分享的卡片进去的时候会在onload中得到webview的网址,解码后赋值给src属性就行了 let that = this const shareInfo = { title: that.data.shareData.title, path: `/pages/hudong/common/pages/hdview/index?url=${encodeURIComponent(that.data.shareData.url)}`, imageUrl: that.data.shareData.imgUrl } return shareInfo }, /** * 分享回调 */ onShareback() { let that = this // 分享成功后 通知h5页面(h5有配置xxxback的话), 调用之后需要手动删除 xxxback that.refreshH5(that.data.shareData.xxxback) delete that.data.shareData.xxxback }, /** * 初始化信息 */ initData(options, userInfo = {}) { let url = decodeURIComponent(options.url); const { openid, appid, token } = userInfo; let statType = '' // 记录当前options的链接 this.data.shareData.url = url // h5链接xxxxxxx=xxxxxxxxx 标识 const navUrl = `${url}${url.indexOf('?') > -1 ? '&' : '?'}xxxxxxx=${token}&dotStatType=${statType}` this.setData({ url: navUrl }) }, // 接收h5发送的数据 getMessage(e) { const that = this const data = e.detail.data let action = '' // 注意:每次发送数据后数据会添加到e.detail.data中的数组, // 并不会清除掉上一次传递的数据,所以我们取数组的最后一位 if(data.length > 0) { let item = data[data.length - 1] action = item.action switch(action) { case 'share': that.dealH5Share(item) break case 'saveFormId': // TODO that.dealSaveFormId(item) break } } }, // 处理接收到h5数据 分享操作 dealH5Share(data) { const that = this if(data) { that.data.shareData = data } }, // 处理接收到h5数据 保存formId操作 (待拓展) dealSaveFormId() { // TODO debugger }, // 刷新H5页面当前 refreshH5(xxxback) { if(typeof xxxback != 'object') { return false } const oldUrl = this.data.url let newUrl = oldUrl const oldParams = ParseURL(oldUrl) // 删除历史 oldParams.xxxback && (newUrl = newUrl.replace(`xxxback=${oldParams.xxxback}`, ``)) newUrl += `&xxxback=${(JSON.stringify(xxxback))}` this.setData({ url: newUrl }) }
H5分享相关改造
/** * 获取指定的URL参数值 * 参数:paramName URL参数 * 调用方法:getQueryParam("name") * 返回值:tyler */ function _getQueryParam(paramName) { paramValue = "", isFound = !1; if (window.location.search.indexOf("?") == 0 && window.location.search.indexOf("=") > 1) { arrSource = decodeURIComponent(window.location.search).substring(1, window.location.search.length).split("&"), i = 0; while (i < arrSource.length && !isFound) arrSource[i].indexOf("=") > 0 && arrSource[i].split("=")[0].toLowerCase() == paramName.toLowerCase() && (paramValue = arrSource[i].split("=")[1], isFound = !0), i++ } return paramValue == "" && (paramValue = null), paramValue } // 判断是否是小程序环境 function IsMiniProgramEnv(fun) { // 通过navigator.userAgent 判断 var bl = navigator.userAgent && navigator.userAgent.indexOf('miniProgram') > -1 if (typeof fun == 'function') { fun(bl) } } // 初始化执行 IsMiniProgramEnv(function (bl) { if (bl) { IsInMiniProgram = true // 判断是否是小程序环境 _initMiniData() } }) // 设置小程序分享 function SetMiniProgramShare(url, title, imgUrl, fun) { if (title && url && imgUrl) { IsMiniProgramEnv(function (bl) { if (bl) { // 向小程序发送消息 var data = { action: 'share', // 触发修改分享参数动作 url: url, title: title, imgUrl: imgUrl } if(typeof fun === 'function') { data.xxxback = fun() || {} } wx.miniProgram.postMessage({ data: data }) } }) } } // H5跳转小程序路径 function _NavigateToMiniProgram(url) { var newUrl = '/pages/hudong/common/pages/bridge/index?url=' + encodeURIComponent(url) wx.miniProgram.navigateTo({ url: newUrl }) } function _initMiniData() { } // 重新包装链接跳转, 用于跳转业务方的小程序地址或者h5页面地址 function HrefToBusiness(url) { if(!url) { return false; } // 是小程序环境, 并且不是h5链接 if(IsInMiniProgram && url.split("?")[0].indexOf('http') == -1) { _NavigateToMiniProgram(url) } else { window.location.href = url } }
webview改造原有小程序项目利弊
优点
- 减少小程序包大小
- 提升开发、迭代效率
- 大多数需求可省去审核流程,h5最新的功能就是小程序功能
缺点
- 用户体验不如原生小程序
- 不能用复杂的动画交互,简单页面还可以
- 权限限制比较多,例如不能 埋点弹起授权手机号授权等
- h5、小程序通讯限制太多,具体可参考微信文档
阅读量! (1390)
点击排行
网站公告
- 欢迎来到我的博客
1:欢迎来到我的博客
2:博客免费api接口现已上线
3:博客会定期更新文章
4:欢迎大家来捧场
站点信息
- 建站时间:2019-8-30
- 网站程序:php,laravel-swoole框架
- 今日流量:570(10分钟统计一次)
- 本月流量:9289
- 浏览总量:388216
- 统计方式:中间件,redis消息队列,定时任务