判斷是否為微信、微信小程序、其他環境
研究背景
項目中有一個需求,在判斷用戶未登錄的情況下跳轉登錄,toLogin通過window.location.href進行跳轉登錄。在線上環境中,發現在未登錄的情況下,Iphone 小程序中偶爾跳轉失效。定位代碼發現判斷小程序函數返回結果在跳轉邏輯之后才獲得結果,猜測由於判斷環境代碼打斷跳轉的進行。臨時方案:跳轉后通過setTimeout再進行一次跳轉。
目前解決方案如下:
toLogin() {
if(isMiniApp() === null) {
setTimeout(() => {
toLogin()
}, 100)
}
window.location.href='https://www.login.com'
}
通過資料查詢得出如下解決方案,通過promise獲取是否未小程序環境,保證在執行其他邏輯之前拿到是否為小程序環境的結果。
引入js
<script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
promise封裝判斷函數
/**
* 判斷是否為微信小程序
* @export
* @returns
*/
export function isWeChatMiniApp() {
const ua = window.navigator.userAgent.toLowerCase();
return new Promise((resolve) => {
if (ua.indexOf('micromessenger') == -1) {
console.log("不在微信或者小程序中")
resolve(false);
} else {
wx.miniProgram.getEnv((res) => {
if (res.miniprogram) {
console.log("在小程序中")
resolve(true);
} else {//在微信中
console.log("在微信中")
resolve(false);
}
});
}
});
}