小程序打開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中返回上一頁。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM