1. 程式人生 > 其它 >小程式開啟h5後返回與postmessage不實時接收問題

小程式開啟h5後返回與postmessage不實時接收問題

前言背景

最近開發個小程式需要有安全驗證功能,大概業務流程就是 一進來小程式喚起安全驗證頁面 -> 然後點選確認傳送給小程式端並關閉當前頁面。看似比較簡單但是踩了一下午坑

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中返回上一頁。