背景
由于以前的项目是公众号的 h5 版本,现在需要一个小程序版本,为了节省人力和时间,我们的做法就是直接在 webview 上指向公众号的h5地址,需要在小程序后台配置业务域名,小程序还提供了开发者在 webview 调用 jssdk,流程跟开发微信公众号一样方便
webview使用jssdk
小程序 webview 使用 jssdk 跟公众号开发一样,需要调用 config 来初始化配置,等 WeixinJSBridgeReady
事件触发后再调用对应的方法,否则程序在js执行立即调用会出现无效
if (typeof WeixinJSBridge == "undefined") {
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
} else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}
}else{
onBridgeReady();
}
有时候我们需要单独在小程序处理一些逻辑,例如实现小程序的支付功能,小程序的跳转功能等等。可以通过以下方法来判断运行环境是否是小程序
// web-view下的页面内
function ready() {
console.log(window.__wxjs_environment === 'miniprogram') // true
}
if (!window.WeixinJSBridge || !WeixinJSBridge.invoke) {
document.addEventListener('WeixinJSBridgeReady', ready, false)
} else {
ready()
}
// 或者
wx.miniProgram.getEnv(function(res) {
console.log(res.miniprogram) // true
})
小程序和webview跳转
webview跳转到小程序原生页面,使用 navigateTo
或者 redirectTo
来实现
wx.miniProgram.navigateTo({url: '/path/to/page'})
wx.miniProgram.redirectTo({url: '/path/to/page'})
webview传参到小程序
webview 传参到小程序原生页面,通过url参数来传递
wx.miniProgram.navigateTo({url: '/path/to/page?a=1&b=2'});
然后在小程序的生命周期 onload
回调事件的 query
参数可以获取到对应的 json 对象
onLoad(query) {
console.log(query.a); // 1
console.log(query.b); // 2
}