当前位置:   article > 正文

小程序跳转-官网更新_wx.miniprogram.navigateto

wx.miniprogram.navigateto

一.跳转问题

(1).小程序跳转H5:

    官网暂不支持直接跳转H5,只能通过嵌套web-view,来访问H5的页面。

web-view注意事项

  1. <template>
  2. <view>
  3. <web-view id="viewopen" :src="src" @message="genData"></web-view>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. src: ''
  11. }
  12. },
  13. onLoad(options) {
  14. let url = options.url
  15. let redirect_url = 'https://www.*****.com.cn/accesages?type=newurl&url=' + encodeURIComponent(url);
  16. this.src = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa32b339***88a59&redirect_uri=' +
  17. encodeURIComponent(redirect_url) + '&response_type=code&scope=snsapi_base&state=1,0#wechat_redirect';
  18. },
  19. onShow() {},
  20. methods: {
  21. //获取传递的参数
  22. genData(e) {
  23. let dataArr = e.detail.data
  24. if (dataArr && dataArr.length > 0) {
  25. console.log(dataArr, 'dataArr && dataArr.length--')
  26. console.log(dataArr, '获取公众号的数据');
  27. }
  28. }
  29. }
  30. }
  31. </script>

(2).H5跳转小程序:

A.要获取公众号的信息的

小程序里内嵌的H5业务的时候跳回小程序。在H5引入js,调用wx.miniProgram.navigateTo跳转小程序方法

注意:这个wx.miniProgram.navigateTo 跳转小程序的方法,前提是 这个h5的页面 是在小程序的web-view嵌套里,然后才可以使用

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>h5跳转小程序</title>
  6. </head>
  7. <body>
  8. <h3 align="center">正在跳转到小程序...</h3>
  9. <script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
  10. <script>
  11. wx.miniProgram.navigateTo({url: '/index/index?phone=18012121212'})
  12. </script>
  13. </body>
  14. </html>

vue 的h5页面

安装weixin-js-sdk

在组件里

  1. <template>
  2. <div>
  3. <div>H5公众号页面</div>
  4. <button @click="jump">跳转的</button>
  5. <button @click="backFn">返回 delta: 0</button>
  6. </div>
  7. </template>
  8. <script setup>
  9. import wx from 'weixin-js-sdk'
  10. import { useRoute } from 'vue-router'
  11. const route = useRoute()
  12. window.wx = wx
  13. /*tabBar*/
  14. const tabBarLinks = [
  15. '/pages/index/index',
  16. '/pages/product/category',
  17. '/pages/user/order',
  18. '/pages/user/my',
  19. ]
  20. function jump() {
  21. let url = route.query.url
  22. if (!url || url.length == 0) {
  23. return false
  24. }
  25. if (tabBarLinks.indexOf(url) !== -1) {
  26. // switchTab 跳转的话,只能用 wx.miniProgram.postMessage传递参数,url不行
  27. wx.miniProgram.switchTab({
  28. url: url
  29. })
  30. wx.miniProgram.postMessage({ data: route.query })
  31. } else {
  32. // wx.miniProgram.navigateTo 目前只能通过url 传递参数, wx.miniProgram.postMessage传递的话,小程序那边接受不到参数
  33. console.log('navigateTo:', url)
  34. wx.miniProgram.navigateTo({
  35. url: url + '?code=' + route.query.code
  36. })
  37. }
  38. }
  39. function backFn() {
  40. //返回小程序上一级
  41. wx.miniProgram.navigateBack()
  42. wx.miniProgram.postMessage({
  43. data: route.query
  44. })
  45. }
  46. onMounted(() => {
  47. setTimeout(() => {
  48. //自动跳转
  49. wx.miniProgram.navigateBack()
  50. wx.miniProgram.postMessage({
  51. data: route.query
  52. })
  53. }, 1000)
  54. })
  55. </script>
  56. <style lang="scss" scoped></style>

小程序的获取值的方式如上面 web-view嵌套方式

B.直接跳小程序-2种方式

wx-open-launch-weapp

注意:

在web-view  里是不能直接识别wx-open-launch-weapp 。

使用微信开放标签前置条件
1、绑定域名
登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”

2、开放对象
1、已认证的服务号,服务号绑定“JS接口安全域名”下的网页可使用此标签跳转任意合法合规的小程序。
2、已认证的非个人主体的小程序,使用小程序云开发的静态网站托管绑定的域名下的网页,可以使用此标签跳转任意合法合规的小程序。

开发过程中发现 测试环境标签都不生效,只有在正式环境可以使用;开发工具不能实现跳转,只能使用手机测试

1)普通html页面

1.引入 js 文件:https://res.wx.qq.com/open/js/jweixin-1.6.0.js

2.通过config接口注入权限验证配置并申请所需开放标签

  1. $.ajax({
  2. method:"GET",
  3. url: "请求后端地址",
  4. data: {
  5. // 请求参数
  6. },
  7. success: function (res) {
  8. // 根据返回的参数进行赋值
  9. wx.config({
  10. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  11. appId: res.data.appId, // 必填,公众号的唯一标识
  12. timestamp: res.data.timestamp, // 必填,生成签名的时间戳
  13. nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
  14. signature: res.data.signature, // 必填,签名
  15. jsApiList: [], // 必填,需要使用的JS接口列表
  16. openTagList: data.data.openTagList,
  17. });
  18. },
  19. });
  20. // 通过ready接口处理成功验证
  21. wx.ready(function () {
  22. // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中
  23. });
  24. // 通过error接口处理失败验证
  25. wx.error(function (res) {
  26. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名
  27. });

 3.使用html

  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=1" />
  7. <title>微信服务后台</title>
  8. <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
  9. <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
  10. <style>
  11. .gooseApplet {
  12. width: 100%;
  13. }
  14. img {
  15. width: 100%;
  16. height: auto;
  17. display: block;
  18. }
  19. .big-container {
  20. width: 100%;
  21. }
  22. </style>
  23. </head>
  24. <body>
  25. <div class="big-container" id="internal"></div>
  26. <script>
  27. var mini_appid = 'wx6****82d';//小程序appid
  28. var path = 'pages/index/index.html';//小程序地址
  29. var goUrl = GetQueryString('goUrl')//获取地址
  30. var openid = GetQueryString('o')//openid
  31. // 获取wx api配置
  32. $.ajax({
  33. method: "GET",
  34. url: "https://www.hxfj.com.cn/wxAppletApi/wx/js-sdk",
  35. data: {
  36. url: 'https://www.hxfj.com.cn/gooseApplet.html?goUrl=' + goUrl + '&o=' + openid
  37. },
  38. success: function (res) {
  39. // 根据返回的参数进行赋值
  40. wx.config({
  41. debug: false,
  42. appId: res.data.appId, //公众号
  43. timestamp: res.data.timestamp,
  44. nonceStr: res.data.nonceStr,
  45. signature: res.data.signature,
  46. jsApiList: ['chooseImage', 'previewImage'], //必写,否则不显示
  47. openTagList: ['wx-open-launch-weapp'] //必写,否则不显示
  48. });
  49. },
  50. });
  51. // 通过ready接口处理成功验证
  52. wx.ready(function () {
  53. // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中
  54. });
  55. // 通过error接口处理失败验证
  56. wx.error(function (res) {
  57. console.log('签名失败', res);
  58. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名
  59. });
  60. //跳转小程序购买
  61. //跳转小程序或公众号
  62. var appletcnt = '<div class="gooseAppletBtn" style="width: 80%;margin: 0 auto;cursor: pointer;"><img src="https://www.hxfj.com.cn//attach/2024/03/28/%E7%AB%8B%E5%8D%B3%E8%B4%AD%E4%B9%B0%E6%8C%89%E9%92%AE_20240328173926000004116.png" style=" width: 100%;" /></div>'
  63. // 也就是把 步骤3 中的代码进行样式和内容的更改,动态渲染
  64. // 这里有个小坑,如果说内容不显示,就给 wx-open-launch-weapp 标签设置width和height,设置不生效要加 position: absolute;
  65. document.getElementById("internal").innerHTML = '<div class="' + classsty + '" id="goWebs" ><img src="https://www.hxfj.com.cn//attach/2024/03/28/%E5%AE%A3%E4%BC%A0%E5%9B%BE1_20240328173905000003903.png" alt="背景图" />' + '<wx-open-launch-weapp style=" z-index: 999;position: fixed;left: 0; bottom: 0px;width: 100%; height: 52px;" id="launch-btn" appid="' + mini_appid + '" path="' + path + '"><template>' + appletcnt + '</template></wx-open-launch-weapp></div';
  66. var btn = document.getElementById('launch-btn');
  67. btn.addEventListener('launch', function (e) {
  68. console.log('成功');
  69. });
  70. btn.addEventListener('error', function (e) {
  71. console.log('失败', e.detail);
  72. });
  73. // 获取html地址栏参数的函数
  74. function GetQueryString(name) {
  75. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  76. var r = window.location.search.substr(1).match(reg);
  77. if (r != null) return unescape(r[2]);
  78. return null;
  79. }
  80. </script>
  81. </body>
  82. </html>

效果如下

注意:a.内容和样式都要写在 wx-open-launch-weapp 标签里面,否则不生效,样式还可以写成行内样式,同时 wx-open-launch-weapp 标签定位position: fixed;是没效果

b.path 小程序地址必须加html

2)vue项目

安装weixin-js-sdk

组件使用

  1. <div >
  2. <wx-open-launch-weapp
  3. id="launch-button"
  4. appid="wx6***82d"
  5. path="pages/index/index.html"
  6. @launch="handleLaunchFn"
  7. @error="handleErrorFn"
  8. >
  9. <script type="text/wxtag-template">
  10. <div style="width: 3rem; height: 3rem">打开小程序</div>
  11. </div>
  12. </wx-open-launch-weapp>
  13. </div>
  14. async mounted() {
  15. await this.init()
  16. },
  17. methods: {
  18. init() {
  19. const url = window.location.href
  20. getJsSdk({
  21. url: url
  22. }).then(res => {
  23. console.log('获取jsdk:', res, res.data.appId)
  24. wx.config({
  25. debug: true,
  26. appId: res.data.appId, //公众号
  27. timestamp: res.data.timestamp,
  28. nonceStr: res.data.nonceStr,
  29. signature: res.data.signature,
  30. jsApiList: ['chooseImage', 'previewImage'], //必写,否则不显示
  31. openTagList: ['wx-open-launch-weapp'] //必写,否则不显示
  32. })
  33. wx.ready(function (res1) {
  34. console.log('获取签名成功:', res1)
  35. })
  36. wx.error(function (res2) {
  37. console.log('获取签名失败:', res2)
  38. })
  39. })
  40. },
  41. handleLaunchFn (e) {
  42. console.log(e)
  43. },
  44. handleErrorFn(e){
  45. console.log('fail', e.detail);
  46. },
  47. }

注意: 1.页面报错找不到模板wx-open-launch-weapp,可以在main.js配置

Vue.config.ignoredElements = ['wx-open-launch-weapp'] 

2.官网例子中template标签要替换为 <script type="text/wxtag-template"><script>

3.注意安装的jssdk版本是1.6.0js

URL Scheme

该接口用于获取小程序 scheme 码,适用于短信、邮件、外部网页、微信内等拉起小程序的业务场景。通过该接口,可以选择生成到期失效和永久有效的小程序码,有数量限制,目前仅针对国内非个人主体的小程序开放

(3).小程序跳转小程序:

同一公众号下关联的另一个小程序。如果没有关联同一个公众号,则无法成功打开另一小程序。(A主体小程序跳转B主体小程序,必须,A主体公众号 关联B主体小程序或是B主体公众号关联A主体小程序)

2020年4月起,小程序跳转小程序 不需要关联,直接调用 wx.navigateToMiniProgram 方法,就可以。也没有数量的限制

所以下面的代码 需要注意,结合更新的官网。注意,在开发工具上,并不会跳转,要真机调试才有效果

(4)小程序嵌套h5.跳转其他小程序 

首先web-view中H5是无法直接打开其他小程序的,只能通过H5跳转回小程序,再让小程序跳转到其他小程序

H5跳转回小程序使用wx.miniProgram.navigateTo()小程序跳转小程序使用wx.navigateToMiniProgram(),官方文档有示例,用法很简单,只需要传入appid,还有path(可选参数,不是必须的,不传则默认跳转到小程序首页)

二、公众号关联小程序
公众号关联小程序后,将可在图文消息、自定义菜单、模板消息等功能中使用小程序。
关联规则:
所有公众号都可以关联小程序。
一个公众号可关联10个同主体的小程序,3个不同主体的小程序。
一个小程序可关联3个公众号。
公众号一个月可新增关联小程序13次,小程序一个月可新增关联5次。

补充:场景值

如:从公众号 profile小程序列表点击进去,获取appid;根据文档中的描述,当场景值为1020,可以在onLaunch中通过referrerInfo.appId获取到来源公众号appid, 

二、wx.navigateToMiniProgram跳转

(1).在A主体小程序app.json加上B主体小程序的appid

"navigateToMiniProgramAppIdList":[
        "wx6f8.......26"
    ]

(2).代码触发

  1. let name = '**青11',certNo='35072******8';
  2. //envVersion ( "develop" 开发板 "trial" 体验版 "release" 正式版)
  3. wx.navigateToMiniProgram({
  4. appId: "wx6f8*******86",
  5. path: 'pages/index/index?name='+name+"&certNo="+certNo,
  6. extraData: {
  7. name:'**青',
  8. certNo:'35072******8'
  9. },
  10. envVersion: "trial",
  11. success(res) {
  12. console.log('跳B小程序',res)
  13. },
  14. fail(res) {
  15. console.log('跳B小程序跳转失败'+res.errMsg)
  16. }
  17. })
  18. 注意调试的时候:A小程序可以通过主机模拟,跳转B小程序体验版,B小程序返回A小程序,之间开发板就好

B主体小程序 pages/index/index 页面 onLoad 可以获取path的参数(url跳转参数

extraData的传参要在B主体小城app.js  在 App.onLaunch,App.onShow 中获取到这份数据。如果跳转的是小游戏,可以在 wx.onShow、wx.getLaunchOptionsSync 中可以获取到这份数据数据。 如下图

(3).报错

  1. 1、报错:fail appId "${appId}" is not in navigateToMiniProgramAppIdList
  2. 在A主体小程序app.json加上B主体小程序的appid
  3. "navigateToMiniProgramAppIdList":[
  4. "wx6f8.......26"
  5. ]
  6. 2、报错:navigateToMiniProgram:fail can only be invoked by user TAP gesture
  7. 需要点击触发才跳转。于是只能想办法让用户去点击,加个提示框让用户确定继续进行操作?
  8. wx.showModal({
  9. title: '温馨提示',
  10. content: '跳转A主体小程序',
  11. showCancel:false,
  12. cancelColor: '#000000',
  13. confirmText: "确定",
  14. confirmColor: '#3cc51f',
  15. success: function (res) {
  16. //envVersion ( "develop" 开发板 "trial" 体验版 "release" 正式版)
  17. wx.navigateToMiniProgram({
  18. appId: "wx276f......01",
  19. path: 'pages/identityValidate/identityValidate?id=2222',
  20. envVersion: "develop",
  21. success(res) {
  22. console.log('A小程序',res)
  23. },
  24. fail(res) {
  25. wx.showToast({
  26. title: 'B跳转失败'+res.errMsg,
  27. icon: 'none',
  28. duration: 1000
  29. });
  30. console.log('失败',res)
  31. }
  32. })
  33. }
  34. })
  35. 3 A小程序跳转到B小程序 ,点击允许跳转 报错“您的来源小程序未被授权或者授权查询失败“
  36. 这是B小程序来源小程序做了限制,为了阻止外部小程序直接跳转,打开

注意:小程序api 更新:

三.注意的问题

1.如A小程序跳转到B小程序,指定页面跳转(指定的页面,还有上一级的页面情况下),此时B小程序就没办法返回上一个页面。

2.A小程序跳转B小程序,提示框样式不可以修改或者去掉提示框

除了扫码和广告的小程序,自己弄的都会有弹窗提示跳转的

3.小程序模板消息:跳转页面仅限本小程序内的页面(官网说的)

4.小程序嵌套公众号:小程序后台系统白名单认证后,是可以访问,但是不能支付

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

闽ICP备14008679号