个人类型的小程序暂不支持使用、是否webview域名白名单、链接在网页中是否能打开
小程序嵌入webview 地址白屏?oppp reno5
10-18不可以,如果硬要这种需求,可以看看 camera 组件https://developers.weixin.qq.com/miniprogram/dev/component/camera.html
wx.chooseImage 拍照之后可以不点确定按钮直接上传图片wx.uploadImage吗?wx.chooseImage({ count: 1, // 默认9 sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['camera'],//可以指定来源是相册还是相机,默认二者都有 success: function (res) { wx.uploadImage({}) } }) [图片]
10-18根据注释自己修改一下 WXML: <canvas canvas-id="watermarkCanvas" style="width: {{canvasWidth}}px; height: {{canvasHeight}}px;"></canvas> <button bindtap="addWatermark">选择图片并添加水印</button> js: data: { canvasWidth: 0, canvasHeight: 0 }, addWatermark() { // 是否清空页面上的视觉效果 // this.setData({ // canvasWidth: 0, // canvasHeight: 0 // }); wx.chooseMedia({ count: 1, mediaType: ['image'], sourceType: ['album', 'camera'], success: (res) => { const tempFilePath = res.tempFiles[0].tempFilePath; wx.getImageInfo({ src: tempFilePath, success: (imageInfo) => { // 获取屏幕宽度 const systemInfo = wx.getSystemInfoSync(); const screenWidth = systemInfo.screenWidth; // 计算图片在canvas中的大小,保持原始宽高比 const scale = screenWidth / imageInfo.width; const canvasWidth = screenWidth; const canvasHeight = imageInfo.height * scale; // 更新 canvas 尺寸 this.setData({ canvasWidth: canvasWidth, canvasHeight: canvasHeight }, () => { // 在 setData 回调中创建 canvas 上下文,确保尺寸已更新 const ctx = wx.createCanvasContext('watermarkCanvas'); // 清空 canvas ctx.clearRect(0, 0, canvasWidth, canvasHeight); // 绘制原图,铺满整个canvas ctx.drawImage(tempFilePath, 0, 0, canvasWidth, canvasHeight); // 设置水印样式 ctx.setFontSize(16); // 固定字体大小为16px ctx.setFillStyle('rgba(255, 255, 255, 0.5)'); ctx.setShadow(2, 2, 2, 'rgba(0, 0, 0, 0.5)'); ctx.rotate(-Math.PI / 6); // 添加水印文字 const watermarkText = '我的水印'; const textWidth = ctx.measureText(watermarkText).width; const xGap = textWidth * 2; // 增加横向间距 const yGap = 48; // 增加纵向间距 // 确保水印覆盖整个canvas,包括旋转后的边角 const diagonal = Math.sqrt(canvasWidth * canvasWidth + canvasHeight * canvasHeight); for (let y = -diagonal; y < diagonal * 2; y += yGap) { const rowOffset = ((y / yGap) % 2) * (xGap / 2); // 偶数行错开半个宽度 for (let x = -diagonal - rowOffset; x < diagonal * 2; x += xGap) { ctx.fillText(watermarkText, x, y); } } ctx.draw(false, () => { wx.canvasToTempFilePath({ canvasId: 'watermarkCanvas', success: (res) => { const watermarkedImagePath = res.tempFilePath; // 上传图片的方法 this.uploadImage(watermarkedImagePath); }, fail: (error) => { console.error('Canvas to image failed:', error); } }); }); }); }, fail: (error) => { console.error('Get image info failed:', error); } }); }, fail: (error) => { console.error('Choose media failed:', error); } }); },
wx.chooseMedia调用相机后怎么添加水印?WXML: <view class="right-section" bindtap="takesfzBack"> <image wx:if="{{ifphotosfzBack}}" class="section-image" style="height: 12vh;" src="/images/sfzBack.png" mode="" /> <image wx:else class="section-image" src="{{photosfzBack}}"></image> <canvas id="myCanvas" canvas-id="myCanvasId"></canvas> <view>上传身份证背面</view> </view> JS: onLoad() { this.setData({ pageLoaded: false }); }, onReady() { const query = wx.createSelectorQuery(); query.select('#myCanvas').fields({ node: true }).exec((res) => { if (res && res.length > 0) { this.myCanvas = res[0].node; this.setData({ pageLoaded: true }); } else { console.error('未找到具有 id="myCanvas" 的元素'); } }); }, takesfzBack() { if (this.data.pageLoaded) { // 调用系统相机或相册选择媒体文件 wx.chooseMedia({ count: 1, mediaType: ['image'], sourceType: ['camera'], success: (res) => { if (res.tempFiles && res.tempFiles.length > 0) { this.setData({ ifphotosfzBack: false, }); const tempFilePath = res.tempFiles[0].tempFilePath; this.addWatermark(tempFilePath); console.log('照片路径:', res.tempFiles[0].tempFilePath); } else { console.error('未获取到照片路径'); } }, fail: (err) => { console.error('选择媒体文件失败:', err); }, }); } else { console.error('页面尚未完全加载,无法执行操作。'); } }, addWatermark(imagePath) { if (this.myCanvas) { const date = new Date(); const formattedDate = `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()} ${date.getHours()}:${date.getMinutes()}:${date.getSeconds()}`; const ctx = this.myCanvas.getContext('2d'); const img = new Image(); img.src = imagePath; img.onload = () => { ctx.drawImage(img, 0, 0, img.width, img.height); ctx.setFontSize(20); ctx.setFillStyle('rgba(255, 255, 255, 0.7)'); ctx.fillText(formattedDate, 10, img.height - 30); wx.canvasToTempFilePath({ canvasId: 'myCanvasId', success: (res) => { this.setData({ photosfzBack: res.tempFilePath, }); }, }); }; } else { console.error('全局画布变量未初始化成功。'); } },
10-18小程序管理后台看一下,站内信里有没有违规记录,有没有备案
小程序上线后搜不到?appid:wxd030f34d3dac33d1
10-16使用真机调试
map组件addMarker函数不起作用https://developers.weixin.qq.com/miniprogram/dev/component/map.html
10-16右上角三个点=》设置=》位置信息
”检测到您没打开定位权限,请在设置中打开“到底在哪里打开呢?[图片][图片][图片]
10-15检查一下有没有添加隐私协议
掉相册的时候遇到backgroundfetch privacy fail?开发工具上不报错,真机报错WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {"errno":101,"errMsg":"private_getBackgroundFetchData:fail private_getBackgroundFetchData:fail:jsapi invalid request data"}
10-15onLaunch(options)和onShow(options)
通过截屏进入小程序该如何判断登录状态,跳转到主页?wx.onUserCaptureScreen(function (res) { console.log('用户截屏了') return { query: "parameter=test", // 通过截屏图片打开小程序的query参数 promise: new Promise((resolve) => { // 通过promise延时传递小程序的query参数 setTimeout(() => { resolve({ query: "parameter=test2", }) }, 1000) // 在1秒内对query进行解析 }) } } ) 通过小程序截屏进入小程序,该如何判断如果不是当前用户自己就跳转到主页?或者进入某些敏感页面直接跳转到主页。 这里的parameter在哪里可以拿到,可以用来当作判断依据吗?感谢!
10-15可能需要更新一下隐私协议
真机调试数据预拉取报错?在开发工具里面调用wx.getBackgroundFetchData是正常的,可以获取到预拉取的数据,但是到了真机调试就会出现问题,报错信息如下。WAServiceMainContext.js:1 [wxapplib]] backgroundfetch privacy fail {"errno":101,"errMsg":"private_getBackgroundFetchData:fail private_getBackgroundFetchData:fail:jsapi invalid request data"} 各位大佬有碰到过类似的问题吗?数据预拉取是否还有其他权限要开启?
10-15微信自带的小房子点击会默认进入首页,自定义图标点击跳转你改成switchtab试试
wx.reLaunch 返回页面时空白页面?wx.reLaunch({ url:"/pages/skyleap/index/index", complete(e){ console.log(e) // {errMsg: "reLaunch:ok"} } }) 执行成功,但是打开的页面是空白页面。 操作流程如下: 使用微信开发者工具编译页面 pages/test/test ,扫码进入 pages/test/test 页面点击小程序的左上角的小房子图标(回到首页【/pages/skyleap/index/index】),显示跳转的路径是对的,但是页面打开确实空白页面
10-15