1. 手机浏览器打开H5页面,点.._vue跳转小程序">
当前位置:   article > 正文

vue H5页面跳转微信小程序以及生成二维码跳转小程序_vue跳转小程序

vue跳转小程序

研究了两种H5跳转小程序的方法,同时携带参数

1. 手机浏览器打开H5页面,点击按钮拉起微信小程序

2. H5页面上生成小程序二维码,手机微信扫码跳转目标小程序

为了开发方便,以上两种均借助了微信小程序云函数来实现

#事前准备

在vue工程的index.html中加入

<script src="https://res.wx.qq.com/open/js/cloudbase/1.1.0/cloud.js"></script>

1. 实现手机浏览器打开H5页面,点击按钮拉起微信小程序

先准备云函数

  1. // 云函数入口文件
  2. const cloud = require('wx-server-sdk')
  3. cloud.init({
  4. env: cloud.DYNAMIC_CURRENT_ENV
  5. })
  6. // 云函数入口函数
  7. exports.main = async (event, context) => {
  8. const wxContext = cloud.getWXContext()
  9. let urlScheme = getUrlScheme(event)
  10. return urlScheme
  11. }
  12. async function getUrlScheme(event) {
  13. return cloud.openapi.urlscheme.generate({
  14. jumpWxa: {
  15. path: '/pages/index/index', // 需要跳转的小程序页面
  16. query: `param1=${event.p1}&param2=${event.p2}`,
  17. },
  18. // 一分钟有效期
  19. isExpire: true,
  20. expireTime: parseInt(Date.now() / 1000 + 60),
  21. })
  22. }

再编写前端代码

  1. <template>
  2. <div class="block">
  3. <div class="input-filed">
  4. <el-input v-model="value1" placeholder="abcde">
  5. <template #prepend>value1</template>
  6. </el-input>
  7. <el-input v-model="value2" placeholder="abcde">
  8. <template #prepend>value2</template>
  9. </el-input>
  10. </div>
  11. <div>
  12. <el-button type="primary" @click="jump">跳转</el-button>
  13. </div>
  14. </div>
  15. </template>
  16. <script setup>
  17. import { onMounted, ref } from 'vue'
  18. const value1= ref('abcde')
  19. const value2= ref('123')
  20. let wxCloud = null
  21. onMounted(async () => {
  22. console.log('onMounted')
  23. await cloudInit()
  24. })
  25. const cloudInit = async () => {
  26. wxCloud = new cloud.Cloud({
  27. identityless: true,
  28. resourceAppid: '小程序APPID',
  29. resourceEnv: '云函数环境id',
  30. })
  31. await wxCloud.init()
  32. }
  33. const jump = async () => {
  34. const res = await wxCloud.callFunction({
  35. name: '填上面云函数名字',
  36. data: {
  37. p1: '1',
  38. p2: '2',
  39. },
  40. })
  41. console.warn(res)
  42. // 跳转,拉起小程序
  43. location.href = res.result.openlink
  44. }
  45. </script>
  46. <style scoped>
  47. .block {
  48. display: flex;
  49. flex-direction: column;
  50. align-items: center;
  51. justify-content: center;
  52. }
  53. .block > * {
  54. margin-top: 10px;
  55. }
  56. .input-filed {
  57. width: 250px;
  58. }
  59. </style>

编译代码,并部署到静态网站上

手机访问网站,点击按钮即可跳转到小程序,在小程序页面的onLoad函数中就可获取options中传递的参数

2. H5页面上生成小程序二维码,手机微信扫码跳转目标小程序

先准备云函数

  1. // 云函数入口文件
  2. const cloud = require('wx-server-sdk')
  3. cloud.init({
  4. env: cloud.DYNAMIC_CURRENT_ENV
  5. })
  6. // 云函数入口函数
  7. exports.main = async (event, context) => {
  8. const wxContext = cloud.getWXContext()
  9. try {
  10. const result = await cloud.openapi.wxacode.getUnlimited({
  11. scene: `param1=${event.p1}&param2=${event.p2}`, //长度32位限制
  12. page: 'pages/index/index',
  13. })
  14. return result
  15. } catch (err) {
  16. return err
  17. }
  18. }

再编写前端代码

  1. <template>
  2. <div class="block">
  3. <div class="input-filed">
  4. <el-input v-model="value1" placeholder="abcde">
  5. <template #prepend>value1</template>
  6. </el-input>
  7. <el-input v-model="value2" placeholder="abcde">
  8. <template #prepend>value2</template>
  9. </el-input>
  10. </div>
  11. <div>
  12. <el-button type="primary" @click="createQRcode"
  13. >创建二维码</el-button
  14. >
  15. </div>
  16. <div>
  17. <img id="QR-img" :src="qrSrc" alt="no image" />
  18. </div>
  19. </div>
  20. </template>
  21. <script setup>
  22. import { onMounted, ref } from 'vue'
  23. const qrSrc = ref('')
  24. const value1= ref('abcde')
  25. const value2= ref('123')
  26. let wxcloud = null
  27. onMounted(async () => {
  28. console.log('onMounted')
  29. await cloudInit()
  30. })
  31. const cloudInit = async () => {
  32. wxcloud = new cloud.Cloud({
  33. identityless: true,
  34. resourceAppid: 'xxx',
  35. resourceEnv: 'xxx',
  36. })
  37. await wxcloud.init()
  38. }
  39. const createQRcode = async () => {
  40. console.log('createQRcode')
  41. const res = await c.callFunction({
  42. name: 'wxacode',
  43. data: {
  44. param1: '1',
  45. param2: '2',
  46. },
  47. })
  48. if (res.result && res.result.errCode === 0) {
  49. showQRCode(res.result.buffer, res.result.contentType)
  50. }
  51. }
  52. function showQRCode(arrayBuffer, contentType) {
  53. var uInt8Array = new Uint8Array(arrayBuffer)
  54. var i = uInt8Array.length
  55. var binaryString = new Array(i)
  56. while (i--) {
  57. binaryString[i] = String.fromCharCode(uInt8Array[i])
  58. }
  59. var data = binaryString.join('')
  60. var base64 = window.btoa(data)
  61. var url = ''
  62. if (contentType.endsWith('png')) url = 'data:image/png;base64,' + base64
  63. else if (contentType.endsWith('jpeg'))
  64. url = 'data:image/jpeg;base64,' + base64
  65. qrSrc.value = url
  66. }
  67. </script>
  68. <style scoped>
  69. #QR-img {
  70. width: 200px;
  71. height: auto;
  72. }
  73. .block {
  74. display: flex;
  75. flex-direction: column;
  76. align-items: center;
  77. justify-content: center;
  78. }
  79. .block > * {
  80. margin-top: 10px;
  81. }
  82. .input-filed {
  83. width: 250px;
  84. }
  85. </style>

在本地运行即可

点击按钮生成二维码,扫码直接跳转,在小程序页面的onLoad函数中就可获取options中传递的参数

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/777990?site
推荐阅读
相关标签
  

闽ICP备14008679号