最近有个项目需求,H5页面在小程序中打开时需要隐藏一些功能。
要想实现,必须判断出当前环境是小程序环境。
方法1:
引入微信js(例如:“https://res.wx.qq.com/open/js/jweixin-1.3.2.js” “jweixin-1.4.0.js”)
代码:
// 需要注意的是该判断是异步执行,所以如果把判断结果赋值给了一个全局变量,有可能出现判断错误,为了逻辑严谨,可以把下面的函数,再次封装,在使用的时候,进行调用。
// 1. 直接判断 写逻辑
if (typeof wx == 'object') { //是否成功引入js
wx.miniProgram.getEnv(function(res) {
if (res.miniprogram) {
//值为true,miniprogram 全小写字母
// 如果跳本小程序的其他页面
wx.miniProgram.navigateTo({url: '/path/to/page'})
// 如果跳另外一个小程序中
wx.navigateToMiniProgram({
appId: '', //要打开的小程序 appId 必填
path: 'page/index/index?id=123', //打开的页面路径,如果为空则打开首页。
extraData: { //需要传递给目标小程序的数据
foo: 'bar'
},
success(res) {// 成功的回调函数
// 打开成功
}
})
}
})
}
// 2. 封装判断 小程序环境
var isMiniProgram = false; //全局变量
function validateWxMiniProgram(callback) {
wx.miniProgram.getEnv(function (res) {
isMiniProgram = res.miniprogram;
callback();
});
}
//在使用的时候调用(特别是页面初始化的时候需要用到) ;如果确定已经判断过了,就直接使用变量来判断就行。
validateWxMiniProgram(()=>{
if(isMiniProgram){
// 小程序环境中需要进行的逻辑
// ...
} else {
console.log('非小程序环境')
}
})
判断微信浏览器 封装函数
function isWxClient(){
var ua = window.navigator.userAgent.toLowerCase();
//通过正则表达式匹配ua中是否含有MicroMessenger字符串
if(ua.match(/MicroMessenger/i) == 'micromessenger'){
return true;
}else{
return false;
}
}
方法2:
如果项目允许的情况下,在配置链接时,带一个指定的参数。
通过js获取链接参数判断。