全栈开发技术分享
首页
👉 CSS大揭秘 👈
  • 目录
  • 分类
  • 标签
  • 归档
  • Vue
  • JavaScript
  • 微信开发
  • 移动端H5调试工具
  • 国内十大前端团队网站
  • Nodejs
  • Egg
  • 环境搭建
  • 运维面板
  • 域名配置
  • Nginx
  • 收藏
  • 常用工具
  • 实用技巧
  • 常用命令
  • 友情链接
关于

Dreaming Lee 🍍 ҉҉҉҉҉҉҉҉

开发小菜鸡
首页
👉 CSS大揭秘 👈
  • 目录
  • 分类
  • 标签
  • 归档
  • Vue
  • JavaScript
  • 微信开发
  • 移动端H5调试工具
  • 国内十大前端团队网站
  • Nodejs
  • Egg
  • 环境搭建
  • 运维面板
  • 域名配置
  • Nginx
  • 收藏
  • 常用工具
  • 实用技巧
  • 常用命令
  • 友情链接
关于
  • 代码规范

    • Eslint
    • Eslint-Plugin-Vue
    • Stylelint
  • uniapp

    • 问题解决

      • 【uniapp】字节小程序BUG - “navigateToMiniProgram/getUserProfile:fail must be invoked by user tap gesture”
        • 问题描述
        • 示例代码
        • 问题分析
        • 问题解决
  • JavaScript

    • JS验证18位身份证号码
    • JS图片压缩
    • JS调用elementUI图片预览
    • JS图片上传前校验大小、尺寸
  • Vue

    • Vue基础教程

      • Vue教程(1)-基础篇
      • Vue教程(2)-路由篇Vue-Router
      • Vue教程(3)- 状态管理Vuex
    • Vue自定义组件开发

      • Vue实现移动端轮播swiper组件
      • Vue实现switch开关组件
    • Vue扩展

      • Vue接入阿里OSS文件上传
    • Vue学习参考资料
  • 微信开发

    • 微信开发参考资料
    • 微信公众号

      • 微信公众号/订阅号/服务号主动给用户发消息
      • 微信jssdk自定义分享在iOS不生效
    • 微信小程序

      • 微信小程序区分运行环境:开发版/体验版/正式版
      • H5唤醒微信小程序
  • 收藏

    • 国内十大前端团队官网及GitHub
  • 常见问题解决

    • js错误

      • iframe下localStorage禁止访问。“Failed to read the localStorage property from Window”
      • TypeError: Promise.allSettled is not a function
    • IE兼容

      • fixed定位在IE下页面滚动时抖动
  • 工具

    • 移动端H5调试工具
  • 前端
  • uniapp
  • 问题解决
Dreaming Lee 🍍 ҉҉҉҉҉҉҉҉
2023-06-21

【uniapp】字节小程序BUG - “navigateToMiniProgram/getUserProfile:fail must be invoked by user tap gesture”

# 问题描述

在使用uniapp开发小程序时,使用uni.navigateToMiniProgram (opens new window)实现打开另一个小程序时,微信小程序 (opens new window)可正常打开,字节小程序 (opens new window)会报错:navigateToMiniProgram:fail must be invoked by user tap gesture

# 示例代码

<template>
  <view class="content">
    <view class="btn" @click="openMiniProgram">打开小程序</view>
  </view>
</template>
<script setup>
const openMiniProgram = () => {
  uni.navigateToMiniProgram({
    appId: 'ttb53ac3872a065e8501',
    path: '/pages/index/index',
    success: () => {
      console.log('打开成功')
    },
    fail: (err) => {
      console.log('打开失败', err)
    }
  })
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 问题分析

根据报错信息,可以看出是因为navigateToMiniProgram方法必须由tap事件触发,才能正常打开另一个小程序。于是修改@click为@tap,再次运行,发现还是报错。

于是查看头条小程序配置文档 (opens new window),发现需要在app.json中配置navigateToMiniProgramAppIdList需要跳转的小程序列表。配置后再次运行,仍旧报同样的错。

# 问题解决

经过排查,最终发现是uniapp的bug。此问题在新版 alpha hx 3.4.5 上已得到修复;通过vue-cli (opens new window)创建的uniapp项目,也需要升级cli版本(执行yarn upgrade,目前我使用的版本是 "@dcloudio/uni-app": "3.0.0-3080420230531001" )。并在在有点击事件的节点上添加 data-eventsync="true" ,注意:全小写。

如果这个标签内部只有文本或者是没有子元素,添加data-eventsync="true"确实可以,但是如果标签内有子元素,还是不生效,任然会报 fail must be invoked by user tap gesture 错误。这时候需要在子元素上也添加 data-eventsync="true"。

为避免不同平台对 data-eventsync 的值解析类型不同,可统一简写为 data-eventsync,或者 :data-eventsync="true"。

最终修改后的代码如下:

<template>
  <view class="content" data-eventsync>
    <view class="btn" @click="openMiniProgram" data-eventsync>打开小程序</view>
  </view>
</template>
<script setup>
const openMiniProgram = () => {
  uni.navigateToMiniProgram({
    appId: 'ttb53ac3872a065e8501',
    path: '/pages/index/index',
    success: () => {
      console.log('打开成功')
    },
    fail: (err) => {
      console.log('打开失败', err)
    }
  })
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

至此,问题圆满解决。 同样,在使用 uni.getUserProfile 获取用户信息时,若报同样错误,也可参考此方法解决。 期待 uniapp 官方早日修复此问题。

#uniapp#抖音小程序#字节小程序
上次更新: 2023-06-21 10:49:53
Stylelint
JS验证18位身份证号码

← Stylelint JS验证18位身份证号码→

最近更新
01
七牛云上传自有证书
04-27
02
使用腾讯云申请免费SSL证书
04-27
03
登录服务器并安装宝塔面板
04-27
更多文章>
Theme by Vdoing | Copyright © 2020-2024 | 豫ICP备2020030395号 | 靳立祥 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式