小程序使用webview內(nèi)嵌h5頁(yè)面 wx.miniProgram.getEnv失效問(wèn)題
背景
最近接到一個(gè)h5需求,和普通的h5不一樣,這個(gè)h5頁(yè)面是嵌入到小程序中使用的,需求簡(jiǎn)單來(lái)說(shuō)就是展示一個(gè)跳轉(zhuǎn)按鈕,判斷如果是小程序環(huán)境下就進(jìn)行跳轉(zhuǎn)到其他小程序頁(yè)面。
實(shí)現(xiàn)思路
核心邏輯其實(shí)就是判斷小程序環(huán)境這一塊,我們可以直接使用wxsdk來(lái)進(jìn)行判斷小程序環(huán)境,由于公司內(nèi)部已經(jīng)有這些api的封裝,所以實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單。
windows.wx實(shí)際上就是wxsdk的對(duì)象
//判斷是否在微信環(huán)境
const isWeixin = /MicroMessenger/i.test(navigator.userAgent);
// 獲取微信運(yùn)行環(huán)境
const getWxEnv = () => {
return new Promise((resolve) => {
let windows: any = window
if (!windows.wx) resolve("wechat");
windows.wx.miniProgram.getEnv((res) => {
if (res.miniprogram) {
resolve("miniprogram");
} else {
resolve("wechat");
}
});
});
}
// 判斷是否在微信小程序環(huán)境
const isMiniprogram = async () => isWeixin && (await getWxEnv()) === "miniprogram";之后使用isMinnipragram變量即可直接判斷是否是小程序環(huán)境
問(wèn)題
wx.miniProgram.getEnv失效,無(wú)法正確判斷是否為小程序環(huán)境。
盤(pán)查后發(fā)現(xiàn),無(wú)法正確拿到windows對(duì)象,原因是小程序中使用webview這個(gè)標(biāo)簽去嵌套h5頁(yè)面,原理其實(shí)是使用了原生的iframe標(biāo)簽,導(dǎo)致在子頁(yè)面中真機(jī)無(wú)法準(zhǔn)確獲取頁(yè)面運(yùn)行環(huán)境
解決
竟然我們?cè)谠撟禹?yè)面沒(méi)法精確拿到windows對(duì)象,那我們可以去拿父頁(yè)面的windows對(duì)象,代碼實(shí)現(xiàn)如下
//判斷是否在微信環(huán)境
const isWeixin = /MicroMessenger/i.test(navigator.userAgent);
// 獲取微信運(yùn)行環(huán)境
const getWxEnv = () => {
return new Promise((resolve) => {
let windows: any = window
windows = windows.wx ? windows : parent.window
if (!windows.wx) resolve("wechat");
windows.wx.miniProgram.getEnv((res) => {
if (res.miniprogram) {
resolve("miniprogram");
} else {
resolve("wechat");
}
});
});
}
// 判斷是否在微信小程序環(huán)境
const isMiniprogram = async () => isWeixin && (await getWxEnv()) === "miniprogram";在windows前面加上個(gè)parent去拿到父頁(yè)面的windows對(duì)象即可,不過(guò)我們還是最好要做一下判斷,如果當(dāng)前子頁(yè)面的windows對(duì)象中有wx對(duì)象,那我們還是直接用該頁(yè)面的windows對(duì)象即可。
微信sdk經(jīng)常能遇到這種奇奇怪怪的問(wèn)題,難怪微信開(kāi)發(fā)社區(qū)一片謾罵了,又一次黑魔法記錄,淺淺記錄一下,希望能對(duì)遇到這個(gè)問(wèn)題的朋友有所幫助。
到此這篇關(guān)于小程序使用webview內(nèi)嵌h5頁(yè)面 wx.miniProgram.getEnv失效問(wèn)題的文章就介紹到這了,更多相關(guān)小程序 wx.miniProgram.getEnv失效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap 響應(yīng)式實(shí)用工具實(shí)例詳解
Bootstrap 提供了一些輔助類(lèi),以便更快地實(shí)現(xiàn)對(duì)移動(dòng)設(shè)備友好的開(kāi)發(fā)。這些可以通過(guò)媒體查詢結(jié)合大型、小型和中型設(shè)備,實(shí)現(xiàn)內(nèi)容對(duì)設(shè)備的顯示和隱藏。下面通過(guò)本文給大家分享Bootstrap 響應(yīng)式實(shí)用工具,一起看看吧2017-03-03
JavaScript之移動(dòng)端H5生成圖片解決方案講解
這篇文章主要介紹了JavaScript之移動(dòng)端H5生成圖片解決方案講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
小程序hover-class點(diǎn)擊態(tài)效果實(shí)現(xiàn)
這篇文章主要介紹了小程序hover-class點(diǎn)擊態(tài)效果實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02
JS實(shí)現(xiàn)同一個(gè)網(wǎng)頁(yè)布局滑動(dòng)門(mén)和TAB選項(xiàng)卡實(shí)例
這篇文章主要介紹了JS實(shí)現(xiàn)同一個(gè)網(wǎng)頁(yè)布局滑動(dòng)門(mén)和TAB選項(xiàng)卡效果,通過(guò)簡(jiǎn)單的自定義切換函數(shù)setTab實(shí)現(xiàn)頁(yè)面元素的遍歷及屬性切換的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09
javascript 通過(guò)鍵名獲取鍵盤(pán)的keyCode方法
下面小編就為大家分享一篇javascript 通過(guò)鍵名獲取鍵盤(pán)的keyCode方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
bootstrap table動(dòng)態(tài)加載數(shù)據(jù)示例代碼
本篇文章主要介紹了bootstrap table動(dòng)態(tài)加載數(shù)據(jù)示例代碼,可以實(shí)現(xiàn)點(diǎn)擊選擇按鈕,彈出模態(tài)框,加載出關(guān)鍵詞列表,有興趣的可以了解一下。2017-03-03

