目前手机微信浏览器中打开的H5页面无法通过API下载图片或文件。
为什么在手机默认浏览器中可以下载,但是当我们在微信中打开浏览器时却无法下载呢?
我认为是微信APP的权限问题。 下载权限由当前使用的APP控制。 微信拒绝内置浏览器的文件下载请求。 即使浏览器本身有相应的下载API,但你就是下载不了。
微信为什么要这么做? 因为恐怕会出现和以往常见的浏览器弹窗广告一样的情况。 如果没有图片下载权限的限制,很多营销人员会诱导用户打开一些网页,然后自动下载一些广告图片之类的。
但您仍然可以按住图片进行保存。
但这并非完全不可能。 微信仍然提供了一些API来实现受限下载功能。
使用微信JS-SDK
我们可以使用微信提供的JS-SDK与微信进行通信,获取一些手机系统能力。
官方的说法是:
微信JS-SDK是微信公众平台为网页开发者提供的基于微信的网页开发工具包。
用法就是在页面中引入这个js文件,然后就可以得到一个wx对象。 然后调用该方法,传入签名、签名等信息(这个需要从微信公众号平台获取)。 之后我们就可以通过wx对象方法与微信进行通信,使用手机系统的能力了。
有一个wx.()方法,用于下载图像。 但实际上我认为它应该用来耍猴戏。
此方法不接受 url 参数,但接受一个。
从哪里来的,从另一个方法wx.()获得的。 wx.()方法用于上传本地图片,但上传成功后,回调函数会得到一个。
在哪里上传? 微信自己的服务器。 如果你想保存到公司服务器上,就得让公司服务器调用多媒体接口从微信服务器取回图片。而且,微信服务器只为你保存3天。
是的,您可以下载的图片来自用户上传,并且有效期只有三天。 另外,下载的图片似乎并没有保存在相册中,而是保存在用户找不到的地方。
结论是完全没用。
微信小程序
小程序提供简单高效的应用开发框架和丰富的组件和API,帮助开发者在微信中开发具有原生APP体验的服务。
微信小程序不算H5,因为它是微信下的原生程序,但其语法与Web开发中使用的类似。
微信小程序项目模板的入口文件为以下代码。
// app.ts App<IAppOption>({ globalData: {}, onLaunch() { // 展示本地存储能力 const logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) // 登录 wx.login({ success: res => { console.log(res.code) // 发送 res.code 到后台换取 openId, sessionKey, unionId }, }) }, })
可以看到,这里还有一个wx对象。
但需要注意的是,这个wx对象和JS-SDK的wx是完全不同的东西,所以不要混淆。
可以通过调用 wx.() 方法并传入 url 来下载该文件。 但有一些限制,比如单次最大下载大小为、只能访问开发设置中配置的指定域名、域名需要ICP注册等。
下载的文件将保存在本地临时路径中。 如果是图片,可以调用wx.um()方法将其保存到相册中。
说了半天,这个微信小程序不是H5。 如果我的微信小程序通过web-view元素嵌入一个H5页面,我的H5页面会不会更强大呢? 我可以使用小程序吗? wx 对象。
不。
虽然是内嵌的H5页面,但实际上与小程序是隔离的。 小程序中嵌入的H5页面其实和普通的H5页面没有什么区别。 你还是得用笨蛋的JS-SDK。
我讲这么多主要是为了让大家认识到wx.()只能微信小程序使用,不能在H5上使用,即使这个H5嵌入到小程序中。
话说回来,为什么微信小程序的能力限制比JS-SDK要少很多呢?
我认为是因为开发者开发的微信小程序是由微信监管的,其发布也需要经过微信的审核。 微信也有权下架任何小程序。
因此,微信并不害怕小程序开发者滥用功能。 如果被抓住的话,就会直接被挡住。
那么计划是什么?
首先,对于微信浏览器中的H5页面,我们不能允许用户通过点击“下载”按钮来下载图片、视频和文档文件(pdf、word等)。 相反,我们将打开一个新页面供您预览。
但对于其他微信无法预览的文件(如果是zip压缩包),则会下载。
但对于显示的图片,用户可以长按图片进行保存。
所以我们常规的解决方案是:
首先需要判断浏览器是否是微信浏览器。 如果不是微信浏览器,下载会保持原来的逻辑。
如果是图片,点击下载按钮时会弹出弹窗,提示用户长按图片进行下载;
如果是视频或文档文件,则提示用户使用默认浏览器下载文件。 考虑到用户使用新浏览器登录比较麻烦,引导用户在默认浏览器中点击右上角打开链接并不是一个好主意。
我们可以在点击下载按钮时复制文件链接,然后让用户打开默认浏览器并粘贴链接进行下载。 这种占用用户剪贴板的行为其实并不好。
或者干脆屏蔽下载按钮,不然会弹出提示说只能在PC上下载。
如果是其他类型的文件,可以下载。
结尾
今天聊聊微信浏览器无法下载图片的一些原因、误区以及解决方法。 希望对您有所帮助。