uniapp中微信小程序與H5相互跳轉以及傳參詳解(webview)

技術棧:

uniapp-H5+uniapp-微信小程序(vue3+vite2+ts)

前言:

在單位做項目的時候碰到一個需求,需要從微信小程序跳轉到H5頁面,這兩個端都是使用uniapp編寫的,查資料後決定使用webview來嵌入完成,然後考慮到還可能有參數(數據)需要傳遞,所以實現後記錄一下。ps:以下代碼我是根據查找的資料裡從vue2改成vue3的寫法,若有需要改回去即可

一、小程序向H5傳遞

1.小程序端發送數據

在如下路徑創建文件/webview/index.vue,也可自行命名

<template>
    <web-view :webview-styles="webviewStyles" :src="url"></web-view>
</template>

<script lang='ts' setup>
import { ref, reactive, computed, onMounted } from 'vue'
import { onShow, onReady, onLoad } from '@dcloudio/uni-app'
import qs from 'qs'

const webviewStyles = reactive({
    progress: { color: '#FF3333' }
})

// 使用qs序列化地址,qs版本需要為@5.2.1,其他版本我試瞭會報錯
const data = reactive({ id: 1, age: 18, name: '前端', ids: [69, 71] })
const url = ref('http://localhost:3000/#/pages/speechcraft/index?')
onLoad(() => {
	// decodeURI避免中文亂碼,indices: false去除默認格式
    url.value += decodeURI(qs.stringify(data, { indices: false }))
})
</script>

<style lang='scss' scoped></style>

2.pages.json進行設置

添加該頁面,然後可以在其他頁面設置一個跳轉動作,跳轉到該頁面就會自動進入H5頁面

{
	"path": "pages/webview/index",
	"style": {
		"navigationBarTitleText": "uni-app"
	}	
}

3.H5端進行數據接收

在路徑跳轉的頁面接收,補充一點,根據查資料,小程序向H5傳參隻能通過URL來傳遞

<script lang='ts' setup>
import { ref, reactive, computed, onMounted, onBeforeMount } from 'vue'
import qs from 'qs' // 此處qs版本同樣要為@5.2.1

onMounted(() => {
    let routes = getCurrentPages();
    console.log(routes[routes.length - 1].route) // 獲取當前頁面路由
    console.log('獲取傳遞的數據', qs.parse(window.location.href.split('?')[1]))
})
</script>

4.調試方式以及數據查看

此處是後來無意間看到的文章才知道在哪調試,在微信小程序中,到H5頁面後,底部會有一個類似瓢蟲的標志,下圖為工具欄及打印出的參數

二、H5向小程序傳遞

1.引入需要的模塊

這塊是我踩坑比較多的地方,是重點,首先在index.html中引入微信小程序和uniapp相關的SDK,放在<body></body>後面,兩個都得引入,因為uni的SDK關聯瞭微信的SDK

<!DOCTYPE html>
<html lang="en">
  <head>...</head>
  <body>...</body>
  <!-- wx和uni的SDK -->  
  <script src="./src/static/jweixin-1.6.0.js"></script>
  <script type="text/javascript" src="./src/static/uni.webview.1.5.3.js"></script>  
  <script>  
    document.addEventListener('UniAppJSBridgeReady', function() {  
      uniWebview.getEnv(function (res) {
        console.log('當前環境:' + JSON.stringify(res))
      });
    });  
  </script>  
</html>

上述js文件的在線路徑如下

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script src="https://gitee.com/dcloud/uni-app/raw/dev/dist/uni.webview.1.5.3.js"></script>

2.更改文件內容

此處需要將uni.webview.1.5.3.js下載到本地,然後修改裡面的內容,因為默認自帶的方法名為uni,會和本地的uni命名沖突(官方案例是放在html原生頁面裡所以不影響,我放在vue項目裡則會沖突),所以我改成瞭uniWebview,可以格式化後修改,位置如下,微信的SDK本地的和在線的都可以用

3.H5端發送數據

到之前接收的頁面添加一些代碼,用一個發送按鈕進行調用

<template>
    <u-button @click="sendMessage">發送</u-button>
</template>

<script lang='ts' setup>
import { ref, reactive, computed, onMounted, onBeforeMount } from 'vue'
import qs from 'qs'

onMounted(() => {
	// 此處為之前接收數據的代碼
    console.log('獲取傳遞的數據', qs.parse(window.location.href.split('?')[1]))
})

const sendMessage = () => {
    uniWebview.postMessage({
        data: {
            action: '我要向微信端傳遞的數據',
            phoneNumber: '15314601234'
        }
    });
    
}
</script>

<style lang='scss' scoped></style>

4.小程序端進行數據接收

<web-view></web-view>添加@message="reciveMessage",下方添加const reciveMessage = (data: any) => {...},在返回到小程序的時候即可接收

<template>
        <web-view :webview-styles="webviewStyles" :src="url" @message="reciveMessage"></web-view>
</template>

<script lang='ts' setup>
import { ref, reactive, computed, onMounted } from 'vue'
import { onShow, onReady, onLoad } from '@dcloudio/uni-app'
import qs from 'qs'

onLoad(() => {
	// 之前qs序列化的代碼,省略掉部分
    url.value += decodeURI(qs.stringify(data, { indices: false }))
})

const reciveMessage = (data: any) => {
    uni.showToast({
        title: "reciveMessage接收到消息:" + JSON.stringify(data.detail),
        duration: 2000,
        icon: 'none'
    });
    console.log("接收到消息:" + JSON.stringify(data.detail));
}
</script>

<style lang='scss' scoped></style>

5.調試方式以及數據查看

在微信小程序跳轉回的頁面即可看到

三、參考鏈接地址

1、更多細節部分及兼容部分看官方文檔:https://uniapp.dcloud.net.cn/component/web-view.html#web-view

2、uni改成uniWebview修改參考:https://ask.dcloud.net.cn/article/id-38847__page-3#reply

3、基本流程參考:http://t.zoukankan.com/lizhao123-p-12005868.html

4、需要引用微信SDK的原因參考:https://ask.dcloud.net.cn/article/35083

5、特別提示,隻有認證過的企業賬號才能在手機上真機調試正確跳轉過去,個人賬號現在不支持這功能,會報提示“web-view不支持打開非業務域名請重新配置”,參考文章:https://www.jb51.net/article/260762.htm,但是開發時在微信小程序的詳情設置中打開允許,在開發者工具裡是能跳轉的

總結 

到此這篇關於uniapp中微信小程序與H5相互跳轉以及傳參的文章就介紹到這瞭,更多相關uniapp 小程序與H5相互跳轉內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: