支付宝sdk引入
<script>
if (navigator && navigator.userAgent.indexOf('AliApp') > -1) {
document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>');
}
</script>
js
import wx from 'weixin-js-sdk'
// 获取网页打开场景,在小程序、微信浏览器
// WX_MP-微信小程序,WX_OP-微信公众号,ALI_MP-支付宝小程序,ALI_OP-支付宝生活号,H5-网页
export const getOpenWebScene = () => {
//判断是否移动端设备或者PC端设备
function isMobileDevice() {
return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
}
let ua = navigator.userAgent.toLowerCase();
// 是否微信环境
if (ua.match(/MicroMessenger/i) == "micromessenger" && wx.miniProgram) {
return new Promise(resolve => {
wx.miniProgram.getEnv(function (res) {
if (res.miniprogram) {
resolve("WX_MP");
} else {
resolve("WX_OP");
}
});
});
} else if (navigator.userAgent.indexOf('AliApp') > -1 && my) {
// 支付宝环境
return new Promise(resolve => {
my.getEnv((res)=>{
if (res.miniprogram) {
// 在支付宝小程序中打开
resolve("ALI_MP");
} else {
resolve("ALI_OP");
}
})
});
} else {
console.log("不在微信支付宝里");
return new Promise(resolve => {
if(isMobileDevice()){
resolve("H5");
}else{
resolve("PC");
}
});
}
}
注:如果在微信/支付宝小程序嵌套的h5中还嵌套了iframe,在最里面的 h5 getEnv 会失效,可以通过
if (window.self !== window.top) {
console.log('被医护端小程序嵌套俩次真机 getEnv 失效');
//resolve("ALI_MP");
//resolve("WX_MP");
}