前言背景
最近開發個小程序需要有安全驗證功能,大概業務流程就是 一進來小程序喚起安全驗證頁面 -> 然后點擊確認發送給小程序端並關閉當前頁面。看似比較簡單但是踩了一下午坑
webview
onMessage
經過查看找到啦webview api,可以打開一個h5頁面,然后看了下webview 中的配置項

發現onMessage方法可以接收postMessage的方法。開始擼碼
但是這個特定時機我確實沒有立即理解上去,我以為和iframe差不多,是實時的,結果試了一下不行,才知道這個特定時機的關鍵。。。。
解讀特定時機“后退、組件銷毀、分享”
那么如何能達到這個特定時機呢?分享首先排除在外,所以只能思考如何實現組件銷毀和后退,第一個思路就是h5怎么實現后退呢,或者跳轉到某一頁,所以發現可以在h5調用后退方法,但是后退只能是頁面所以安全認證組件不能寫在tabbar里面, 只能在寫一個頁面然后打開該頁面才可以。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
</head>
<body>
<button onclick="openBack()">點擊我返回小程12</button>
</body>
<script>
function openBack() {
console.log('gggg')
// wx.miniProgram.navigateTo('/pages/SecurityCheck/index')
wx.miniProgram.postMessage({
data: {
name: 'name',
age: 12
}
})
wx.miniProgram.navigateBack()
}
</script>
</html>
看到注釋開始用了wx.miniProgram.navigateTo,開始以為直接跳轉到某一個路由就可以了,但是事實證明還是不能夠,因為我們要跳轉的是tabbar頁面,所以只需要后退就可以。
本以為踩坑到此結束,但是點擊死活沒反應,小程序代碼如下

點擊沒反應就開始排查,最后發現是打開頁面的方法有誤。
打開頁面方式

路由有以上幾個方法
- switchtab,跳轉到 tabBar 頁面,並關閉其他所有非 tabBar 頁面。因為打開是新的頁面所以不行
- relaunch, 開始我就用的這個方法,但是這個是關閉所有頁面,打開到應用內的某個頁面,所以他就沒有上一頁一說啦。
....
所以最后找到了navigateTo方法,才算踩坑結束
總結
- 必須是打開一個新的頁面,用navigateTo
- postmessage后在h5中返回上一頁。
