微信小程序webview中嵌套uniapp时的文件下载问题

这篇具有很好参考价值的文章主要介绍了微信小程序webview中嵌套uniapp时的文件下载问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前往闪闪の小窝以获得更好的阅读评论体验

背景

这个标题就已经够抽象了吧

本来用微信小程序的web-view去嵌套h5已经因为微信的种种限制(微信不希望你把微信小程序当做一个浏览器来用,它就是不想担责)导致微信登录、文件下载等种种微信特色问题已经很烦了,结果我们这有个场景是用uniapp开发出h5的页面,然后再用微信小程序的web-view去嵌套这个uniapp生成的h5页面……

本次下载场景的情况也是在文件下载的时候,安卓手机点击没反应,ios能打开文件但是都是乱码

解决方案

出现的问题跟这位老哥一模一样:
uniapp微信小程序使用webview嵌套h5的文件下载问题

他的解决方案是没错的但是遗漏了一些要点,这里结合在微信小程序官方文档以及另外一位知乎老哥较为完整的描述进行总结

一、思路

通过判断当前的设备环境来进行不同的操作,如果判断是微信小程序则在h5中跳转到小程序的特定页面,并且将文件资源的URL传递过去。之后在小程序中调用微信的下载文件或者保存文件API

二、引入依赖

这一步很关键,但是CSDN的老哥遗漏没讲

如果是普通h5,那么引入js:

<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

如果是uniapp(本质上是Vue)或者Vue项目,需要安装依赖并引入:

npm install weixin-webview-jssdk
import wx from "weixin-webview-jssdk";

三、H5端代码

// 判断所在环境
			var ua = window.navigator.userAgent.toLowerCase();
			if (ua.match(/micromessenger/i) == 'micromessenger') {
				// console.log('是微信客户端')
				uni.showModal({
					title: '提示',
					content: '是微信客户端:' + ua,
					success: function (res) {
						if (res.confirm) {
							// 执行确认后的操作
							// 打开微信特定页面,然后下载文件
							var fileDownPath = 'https://www.baidu.com/img/flexible/logo/pc/result.png';
							wx.miniProgram.navigateTo({
								url: `/pages/file-upload/file-upload?url=${encodeURIComponent(fileDownPath)}`
							})
						}else {
							// 执行取消后的操作
						}
					}
				})
			} else {
				// h5端直接使用a标签下载
				// this.downloadH5(fileDownPath,item.fieldName)
				// console.log('不是微信客户端')
				uni.showModal({
					title: '提示',
					content: '不是微信客户端:' + ua,
					success: function (res) {
						if (res.confirm) {
							// 执行确认后的操作
						}else {
							// 执行取消后的操作
						}
					}
				})
				// 但我是uniapp
				uni.downloadFile({
						url: this.baseURL + url,
						success: (res) => {
							var filePath = res.tempFilePath;
							uni.openDocument({
								filePath: encodeURI(filePath),
								showMenu: true,
								fileType: fileType,
								success: (res) => {
									console.log('打开文档成功');
								},
								fail(err) {
									console.log('小程序', err);
								}
							});
						}
					});
			}

四、微信小程序端代码

  • tip:每个页面只能有一个 web-view,web-view 会自动铺满整个页面,并覆盖其他组件。
  • tip:web-view 网页与小程序之间不支持除 JSSDK 提供的接口之外的通信。
  • tip:在 iOS 中,若存在 JSSDK 接口调用无响应的情况,可在 web-view 的 src 后面加个#wechat_redirect解决。
  • tip:避免在链接中带有中文字符,在 iOS 中会有打开白屏的问题,建议加一下 encodeURIComponent

新建一个下载用的页面
小程序webview下载文件,微信小程序学习,个人博客,微信小程序,uni-app,下载

获取参数URL调用微信小程序api去下载就行

// pages/file-upload/file-upload.js
Page({

    /**
     * 页面的初始数据
     */
    data: {
        url: ''
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {
        let that = this
        let url = decodeURIComponent(options.url) // 解码
        console.log(url);
        this.setData({
          url: url
        })
        wx.showLoading({
          title: '加载中...',
        })
        wx.downloadFile({ // 下载文件
          url: that.data.url,
          success: function (res) {
            that.setData({
              tempFilePath:res.tempFilePath
            })
            let filePath = res.tempFilePath // 文件临时路径
            console.log(filePath)
            // debugger
            that.downFile()
            // wx.openDocument({ // 预览文件
            //   filePath: filePath,
            //   showMenu: true,
            //   success: function (res) {
            //     wx.hideLoading();
            //   },
            //   fail: function (error) {
            //     console.log(error);
            //   }
            // })
          },
          fail: function (error) {
            console.log(error);
            wx.showToast({
              title: '文件下载失败',
              icon: 'error'
            })
            wx.hideLoading()
          }
        })
    
      },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {

    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    },
    // 保存文件
  downFile() {
    wx.showLoading({
      title: '文件保存中',
    })
    let that = this
    wx.saveFile({ // 保存
      tempFilePath: that.data.tempFilePath, // uploadFile返回的临时路径
      success: (res) => {
        let filePath = res.savedFilePath // 存放的路径
        wx.showToast({
          title: '保存成功:' + filePath,
          icon: 'none'
        })
        setTimeout(() => {
          wx.hideLoading({
            success: (res) => {
              wx.navigateBack({
                delta: 1,
              })
            },
          })
        }, 1500);

      },
      fail: (err) => {
        debugger
        wx.showToast({
          title: '文件保存失败',
          icon: 'error'
        })
        console.log(err)
      }
    })
  }
})

效果图

小程序webview下载文件,微信小程序学习,个人博客,微信小程序,uni-app,下载

参考

uniapp微信小程序使用webview嵌套h5的文件下载问题 - CSDN

微信小程序web-view与H5 通信方式探索 - 知乎

微信小程序中webView的H5与小程序通信 - 掘金

web-view - 微信小程序官方文档文章来源地址https://www.toymoban.com/news/detail-848644.html

到了这里,关于微信小程序webview中嵌套uniapp时的文件下载问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uniapp实现h5、app、微信小程序三端pdf文件下载和预览

    以下代码兼容三端,app,h5,微信小程序,经过个人测试 手机端有两种方法,使用renderjs或者uniapp的api 两者的区别 使用renderjs的写法,会提示用户是否下载文件,下载完成后用户需要手动点击下载的文件,才会打开文件 使用uniapp的api则可以直接下载并直接预览,不需要用户操

    2024年02月11日
    浏览(29)
  • Uniapp基于微信小程序以及web端文件、图片下载,带在线文件测试地址

    一、效果 传送门 二、UI视图

    2024年02月13日
    浏览(26)
  • uniapp中微信小程序和H5相互跳转及传参(webview)

    技术栈:uniapp-H5+uniapp-微信小程序(vue3+vite2+ts) 前言:在单位做项目的时候碰到一个需求,需要从微信小程序跳转到H5页面,这两个端都是使用uniapp编写的,查资料后决定使用webview来嵌入完成,然后考虑到还可能有参数(数据)需要传递,所以实现后记录一下。ps:以下代码

    2024年02月09日
    浏览(26)
  • uniapp vue3中使用webview在微信小程序中实现双向通讯

    直接上图,注意事项是这里 官网链接: https://uniapp.dcloud.net.cn/component/web-view.html 传递方法的话好像只能通过url来传,其它方式不支持,,,我这个参数没做处理,用的话记得把参数做一下处理 也就是说传递数据之后需要 uni.redirectTo({ url: \\\'/pages/testFabric/index\\\' }) 特定时机,当然用

    2024年04月13日
    浏览(29)
  • 开发uniapp过程中对app、微信小程序与h5的webview调试

        因为在开发中使用到了webview,因为出现一些问题,所以需要对webview进行跟踪调试,但因为app,h5与微信小程序不一样,所以需要单独说一下。     一、H5     这个比较简单,因为都是在chrome,用F12就可以  二、对微信小程序       因为普通的uniapp页面上都能通过F12可以

    2024年02月11日
    浏览(37)
  • uniapp - 微信小程序平台实现预览 office 文件及保存下载到本地功能,将word/excel/ppt/pdf等文件在小程序内进行预览,用户可以保存和转发给好友进行下载到手机(一键复制运行)

    在uniapp微信小程序开发中,预览文件、下载文件并保存到手机本地功能(支持office全套word/pdf/ppt/excel等),兼容安卓和苹果端非常好用, 本文有2种方案,愿意用哪个就用哪个,都有示例代码和详细说明。

    2024年02月08日
    浏览(158)
  • uniapp嵌套webview,无法返回上一级?

    场景: 进入首页,自动跳转第三方应用 遇到问题 在设备上运行时,无法回退上一级,直接退出应用了; 预期:一级级的返回页面; 解决方式 个人想到临时解决方式,欢迎老铁们可以分享其他方式 进入首页 index ,不要先加载 web-view 新建页面,例 webview.vue 方式一 例:安卓

    2024年01月22日
    浏览(29)
  • 微信小程序文件预览和下载-文件系统

    文件预览和下载 在下载之前,我们得先调用接口获取文件下载的 url 然后通过 wx.downloadFile 将下载文件资源到本地 tempFilePath 就是临时临时文件路径。 通过 wx.openDocument 打开文件。 showMenu 表示预览文件右上方的菜单,你可以在该菜单中选择保存文件,将文件显示的保存到本地

    2024年02月04日
    浏览(32)
  • 微信小程序是如何上传文件以及下载文件

    微信小程序可以使用wx.uploadFile() API来上传文件,使用wx.downloadFile() API来下载文件。 上传文件的步骤如下: 1、创建一个选择文件的按钮。 2、用户点击按钮后,调用wx.chooseImage()方法来选择文件。 3、调用wx.uploadFile()方法上传文件。 示例代码如下: 下载文件的步骤如下: 1、创

    2024年02月11日
    浏览(36)
  • 微信小程序文件下载两种方式

    1. 基本url方式下载(自定义下载文件名称) 2. 基于后台返回流的方式下载 欢迎关注微信公众号算法小生

    2024年02月13日
    浏览(92)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包