uni-app 小程序 webview 访问 uni 打包的 h5 页面中无法唤起图片选择
uni-app 小程序 webview 访问 uni 打包的 h5 页面中无法唤起图片选择
微信小程序,兼容web-view需要引入微信JS-SDK。
参考文档:
https://uniapp.dcloud.io/component/web-view.html#getenv
微信小程序 web-view网页中支持的JS API
更多关于uni-app 小程序 webview 访问 uni 打包的 h5 页面中无法唤起图片选择的实战教程也可以访问 https://www.itying.com/category-93-b0.html
回复 yang_zhang: 点个赞再走呀
小程序能分享下么
现在是测试阶段,体验版
打开 开发者调试 试一试
浏览器,微信扫码都是正常的,小程序访问有的手机能唤起选择功能,我这个就不行
回复 小枫叶: 暂时还没发现什么规律,别人也是vivo手机,就可以打开相册,我的也是vivo,点击就没反应,所以不知道是不是个例
鸿蒙系统和部分安卓11是无法调用相册的 这个用 小程序web-view就调用不出来 没任何反应
请问怎么解决的呢,我也遇到同样的问题
我也遇到了,大概找到原因了,无论是chooseImage还是原生的input:file,只要设置了多选就无法唤起选择弹框,这是部分浏览器限制的,目前只支持一次选一张。还没有找到其他解决方法
我加了选择限制一张就好了,感谢感谢
我回头试试,感谢感谢
在 Uni-app 中,如果你在小程序的 webview
中加载了 Uni-app 打包的 H5 页面,并且在该 H5 页面中无法唤起图片选择功能,可能是由于以下几个原因:
1. 小程序 webview
的限制
小程序中的 webview
组件本身并不支持直接调用原生的图片选择功能。小程序和 H5 的运行环境不同,小程序有自己的 API 来调用图片选择(如 wx.chooseImage
),而 H5 中通常使用 <input type="file">
来实现图片选择。
如果你在 H5 页面中使用的是 <input type="file">
,在小程序的 webview
中可能无法正常触发。
2. 解决方案
如果你需要在 webview
中实现图片选择功能,可以考虑以下解决方案:
-
方案一:使用小程序的图片选择 API 在 H5 页面中,可以通过
uni.postMessage
与小程序进行通信,调用小程序的图片选择 API(如wx.chooseImage
)。具体步骤如下:- 在 H5 页面中,通过
uni.postMessage
发送消息给小程序,请求图片选择。 - 在小程序端监听
webview
的message
事件,接收到消息后调用小程序的图片选择 API。 - 选择完图片后,将图片信息通过
webview
的postMessage
方法传回给 H5 页面。
示例代码:
// H5 页面 function chooseImage() { if (window.uni && uni.postMessage) { uni.postMessage({ action: 'chooseImage' }); } else { // 非小程序环境下,直接使用 <input type="file"> const input = document.createElement('input'); input.type = 'file'; input.accept = 'image/*'; input.onchange = function (event) { const file = event.target.files[0]; // 处理文件 }; input.click(); } } // 监听小程序返回的图片信息 window.addEventListener('message', function (event) { const data = event.data; if (data.action === 'imageSelected') { const imageUrl = data.imageUrl; // 处理图片 } });
// 小程序端 Page({ onLoad() { const webViewContext = uni.createWebViewContext('webview'); this.webViewContext = webViewContext; }, onMessage(event) { const data = event.detail.data; if (data.action === 'chooseImage') { wx.chooseImage({ count: 1, success: (res) => { const tempFilePaths = res.tempFilePaths; this.webViewContext.postMessage({ action: 'imageSelected', imageUrl: tempFilePaths[0] }); } }); } } });
- 在 H5 页面中,通过