您现在的位置是:首页> 编程文章 个人博客模板
小程序webview使用
无痕小Q个人博客
2020-02-05 22:42:49【
主页】
2257人已围观
简介一、使用原因 由于小程序包大小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、小程序通讯限制太多,具体可参考微信文档
阅读量! (2257)
点击排行
相遇就是缘分,相处就是续缘,相知就是惜缘。爱的路上,没有早晚,也没有长短,只有是否珍惜。惊鸿一瞥的回眸,让心从此跟你走,无论朝朝暮暮,寒风酷暑;莞尔一笑的笑颜,让爱从此有了归属,无论人情冷暖,是风是雨
网站公告
- 欢迎来到我的博客
1:欢迎来到我的博客
2:博客免费api接口现已上线
3:博客会定期更新文章
4:欢迎大家来捧场
站点信息
把复杂的事情简单化,把琐碎的事情自动化,集中精力做事
- 建站时间:2019-8-30
- 网站程序:php,laravel-swoole框架
- 今日流量:537(10分钟统计一次)
- 本月流量:3300
- 浏览总量:399441
- 统计方式:中间件,redis消息队列,定时任务
申请链接友情链接
国破山河在,城春草木深。 感时花溅泪,恨别鸟惊心。 烽火连三月,家书抵万金。 白头搔更短,浑欲不胜簪。