- 点击允许按钮后图片仍然保存失败
首先我在开发工具中清除了缓存信息后,长按图片,会弹出申请获得以下权限的提示框,我点击允许后,图片仍然保存失败,不知道为什么。 [代码]save: [代码][代码]function[代码][代码]() {[代码][代码] [代码][代码]console.log([代码][代码]'hello'[代码][代码])[代码][代码] [代码][代码]let that = [代码][代码]this[代码][代码] [代码][代码]wx.getSetting({[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log([代码][代码]"getsetting"[代码][代码])[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]// 如果没有则获取授权[代码][代码] [代码][代码]if[代码] [代码](!res.authSetting[[代码][代码]'scope.writePhotosAlbum'[代码][代码]]) {[代码][代码] [代码][代码]wx.authorize({[代码][代码] [代码][代码]scope: [代码][代码]'scope.writePhotosAlbum'[代码][代码],[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]console.log(res)[代码][代码] [代码][代码]wx.saveImageToPhotosAlbum({[代码][代码] [代码][代码]filePath: that.data.filePath,[代码][代码] [代码][代码]success() {[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]title: [代码][代码]'保存成功'[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail(res) {[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]console.log(res)[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]title: [代码][代码]'保存失败'[代码][代码],[代码][代码] [代码][代码]icon: [代码][代码]'none'[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail() {[代码][代码] [代码][代码]// 如果用户拒绝过或没有授权,则再次打开授权窗口[代码][代码] [代码][代码]//(ps:微信api又改了现在只能通过button才能打开授权设置,以前通过openSet就可打开,下面有打开授权的button弹窗代码)[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]openSet: [代码][代码]true[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]console.log([代码][代码]"no"[代码][代码])[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]// 有则直接保存[代码][代码] [代码][代码]wx.saveImageToPhotosAlbum({[代码][代码] [代码][代码]filePath: that.data.filePath,[代码][代码] [代码][代码]success() {[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]title: [代码][代码]'保存成功'[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail(res) {[代码][代码] [代码][代码]console.log(that.data.filePath)[代码][代码] [代码][代码]console.log(res)[代码][代码] [代码][代码]wx.showToast({[代码][代码] [代码][代码]title: [代码][代码]'保存失败'[代码][代码],[代码][代码] [代码][代码]icon: [代码][代码]'none'[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]fail(res) {[代码][代码] [代码][代码]console.log(res)[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码]},[代码]错误提示是:saveImageToPhotosAlbum:fail file not found 但实际上可以获取到文件的路径,成功保存的话有些时候可以有时候不行
2019-03-18 - 审核不通过,我没诱导分享至朋友圈
你们提供分享到朋友圈这个功能了????? 我没诱导用户分享到朋友圈啊????? 望通过。
2019-03-09 - 小程序审核不通过,在线等,很着急
别人的失物招领小程序都可以上线,是个人开发者不是企业主体,还能发布信息,我这个为什么就不可以?????
2019-03-06 - 审核不通过,求求你们通过我的审核吧
小哥哥小姐姐们通过我的新版本吧,上一次提交的都过了,这个和上一个版本界面都没动,就改了几个bug,你们通过吧,求求你们了!
2019-03-06 - canvas动态设置高度
- 当前 Bug 的表现(可附上截图) 我在js中的data里设置 height: "650px" 这个是最大的高度,而在onshow中读取图片,设置文字,这些高度都是变化的,所以我用dynamic_height来指示实际也就是最后的canvas高度,而在有些情况下,canvas的高度是650px而不是在onshow中动态设置的高度 - 预期表现 [图片] 这个是正常的图片。bug后的图片会比这个高,但是下面有一部分是空白。 我在onload中设置了这个canvas要显示什么文字,在onshow中用wx.getImageInfo获取了图片的高度,在success方法中,通过res来获取图片的高度,并得到整个图片的高度,最后用this.setdata设置高度 - 提供一个最简复现 Demo <!--这里是wxml--> [代码]<[代码][代码]canvas [代码][代码]canvas-id[代码][代码]=[代码][代码]"shareCanvas" [代码][代码]style[代码][代码]=[代码][代码]"width:400px;height:{{height}};" [代码][代码]></[代码][代码]canvas[代码][代码]>[代码] //这里是onshow函数,可以看到有dynamic_height = dynamic_height + const这种的语句,用来增加图片高度 //在onshow中我还用了fillrect来绘制一个大的矩形作为背景,其高度也是固定的 [代码]onShow: [代码][代码]function[代码] [代码]() {[代码] [代码] [代码][代码]let self = [代码][代码]this[代码][代码] [代码][代码]console.log([代码][代码]this[代码][代码].data.stuffname.length)[代码][代码] [代码][代码]wx.getImageInfo({[代码][代码] [代码][代码]src: self.data.src,[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]const ctx = wx.createCanvasContext([代码][代码]'shareCanvas'[代码][代码])[代码][代码] [代码][代码]const stuffnamewidth = ctx.measureText(self.data.stuffname)[代码] [代码][代码] ctx.setFillStyle('#FFFFFF') ctx.fillRect(0, 0, 400, 700) [代码] [代码][代码]ctx.setTextBaseline([代码][代码]'top'[代码][代码])[代码][代码] [代码][代码]var[代码] [代码]dynamic_height = pic_name + 17[代码][代码] [代码][代码]var[代码] [代码]stuffname = self.data.stuffname[代码][代码] [代码][代码]var[代码] [代码]chr = stuffname.split([代码][代码]""[代码][代码]);[代码][代码] [代码][代码]var[代码] [代码]temp = [代码][代码]""[代码][代码];[代码][代码] [代码][代码]var[代码] [代码]row = [];[代码][代码] [代码][代码]ctx.setFontSize(33)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'black'[代码][代码])[代码][代码] [代码][代码]for[代码] [代码]([代码][代码]var[代码] [代码]b = 0; b < row.length; b++) {[代码][代码] [代码][代码]ctx.setFontSize(33)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'black'[代码][代码])[代码][代码] [代码][代码]ctx.fillText(row[b], 20, pic_name + 10 + b * 40);[代码][代码] [代码][代码]dynamic_height = dynamic_height + 40[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]ctx.setFontSize(27)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'black'[代码][代码])[代码][代码] [代码][代码]if[代码] [代码](self.data.qq != [代码][代码]null[代码] [代码]&& self.data.qq != [代码][代码]"null"[代码] [代码]&& self.data.qq != [代码][代码]""[代码][代码]) {[代码][代码] [代码][代码]ctx.setFontSize(27)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'black'[代码][代码])[代码][代码] [代码][代码]ctx.fillText([代码][代码]"请联系QQ: "[代码] [代码]+ self.data.qq, 20, dynamic_height)[代码][代码] [代码][代码]dynamic_height = dynamic_height + 40[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]if[代码] [代码](self.data.phone != [代码][代码]null[代码] [代码]&& self.data.phone != [代码][代码]"null"[代码] [代码]&& self.data.phone != [代码][代码]""[代码][代码]) {[代码][代码] [代码][代码]ctx.setFontSize(27)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'black'[代码][代码])[代码][代码] [代码][代码]ctx.fillText([代码][代码]"请联系手机:"[代码] [代码]+ self.data.phone, 20, dynamic_height)[代码][代码] [代码][代码]dynamic_height = dynamic_height + 40[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]ctx.setFontSize(17)[代码][代码] [代码][代码]ctx.setFillStyle([代码][代码]'gray'[代码][代码])[代码][代码] [代码][代码]ctx.fillText(self.data.time + [代码][代码]"发布"[代码][代码], 20, dynamic_height - 3)[代码][代码] [代码][代码]dynamic_height = dynamic_height + 25[代码] [代码] [代码][代码]ctx.moveTo(20, dynamic_height)[代码][代码] [代码][代码]ctx.lineTo(380, dynamic_height)[代码][代码] [代码][代码]ctx.setStrokeStyle([代码][代码]'gray'[代码][代码])[代码][代码] [代码][代码]ctx.stroke()[代码][代码] [代码][代码]dynamic_height = dynamic_height + 15[代码] [代码] [代码][代码]ctx.drawImage([代码][代码]'/icon/code.jpg'[代码][代码], 20, dynamic_height, 100, 100)[代码][代码] [代码][代码]dynamic_height += 115[代码] [代码] [代码][代码]self.setData({[代码][代码] [代码][代码]height: dynamic_height + [代码][代码]"px"[代码][代码] [代码][代码]})[代码] [代码] [代码][代码]ctx.draw([代码][代码]false[代码][代码], [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]// 3. canvas画布转成图片[代码][代码] [代码][代码]wx.canvasToTempFilePath({[代码][代码] [代码][代码]canvasId: [代码][代码]'shareCanvas'[代码][代码],[代码][代码] [代码][代码]quality: 1,[代码][代码] [代码][代码]success(res) {[代码][代码] [代码][代码]self.setData({[代码][代码] [代码][代码]filePath: res.tempFilePath,[代码][代码] [代码][代码]})[代码][代码] [代码][代码]// self.save()[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]})[代码][代码] [代码][代码]console.log(self.data.filePath)[代码] [代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码]
2019-03-05 - 退出小程序后直接关闭微信,再次进入微信只能关闭进程后重启
我有时会遇到这种情况,当使用完某个小程序后点击右上角的退出或者点击手机上的虚拟返回按键,整个微信直接跳到后台,无法进入到正常的聊天窗口,要想回去就只能杀死微信进程然后重新进入。 我的微信版本是7.0.3。安卓版本是6.0。
2019-03-04 - 小程序首页板块页面正式运营内容不完整,在线等,挺着急的
- 需求的场景描述(希望解决的问题) 你好,我不知道我的小程序在你们那边的测试环境下是怎么表现的,我这边程序的体验人员用他们的手机可以展示首页。 能麻烦您提供一下首页截图吗?谢谢了!或者叙述一下程序的表现,麻烦了! [图片]
2019-03-04 - globaldata中的数据在小程序销毁后还在吗
现在在做一个登录的功能,用户没登录前globaldata中的userinfo为null,然后当用户点击授权然后允许后,一般是将userinfo存在storage里还是放在globaldata啊?小程序销毁之后,globaldata中的数据还在吗?
2019-02-15 - 在这个场景下需要登录态吗?没太弄懂登录态的意义
现在想做的一个功能是用户在“我的”界面中查看到自己的历史发布,现在已经可以通过下面的代码在后台获取到用户的openid,而且在用户发布时就后台把物品信息和用户的openid一并写到数据库。当用户点击按钮时,服务器获取到用户的openid后即可筛选出商品列表然后传到前台显示。这个过程是否需要用到session_id以及3rd_session呢? [代码]onLoad: [代码][代码]function[代码] [代码]() {[代码][代码] [代码][代码]var[代码] [代码]that = [代码][代码]this[代码][代码];[代码][代码] [代码][代码]// 查看是否授权[代码][代码] [代码][代码]wx.getSetting({[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]if[代码] [代码](res.authSetting[[代码][代码]'scope.userInfo'[代码][代码]]) {[代码][代码] [代码][代码]wx.getUserInfo({[代码][代码] [代码][代码]success: [代码][代码]function[代码] [代码](res) {[代码][代码] [代码][代码]// console.log(res)[代码][代码] [代码][代码]// 用户已经授权过,不需要显示授权页面,所以不需要改变 isHide 的值[代码][代码] [代码][代码]// 根据自己的需求有其他操作再补充[代码][代码] [代码][代码]// 我这里实现的是在用户授权成功后,调用微信的 wx.login 接口,从而获取code[代码][代码] [代码][代码]wx.login({[代码][代码] [代码][代码]success: res => {[代码][代码] [代码][代码]// 获取到用户的 code 之后:res.code[代码][代码] [代码][代码]console.log([代码][代码]"用户的code:"[代码] [代码]+ res.code);[代码][代码] [代码][代码]// 可以传给后台,再经过解析获取用户的 openid[代码][代码] [代码][代码]// 或者可以直接使用微信的提供的接口直接获取 openid ,方法如下:[代码][代码] [代码][代码]wx.request({[代码][代码] [代码][代码]// 自行补上自己的 APPID 和 SECRET[代码][代码] [代码][代码]url: [代码][代码]'http://192.168.0.102/wechattest/test.php?api_num=3&code='[代码] [代码]+ res.code,[代码][代码] [代码][代码]success: res => {[代码][代码] [代码][代码]// 获取到用户的 openid[代码][代码] [代码][代码]console.log("用户的openid:" + res.data);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]} [代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]// 用户没有授权[代码][代码] [代码][代码]// 改变 isHide 的值,显示授权页面[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]isHide: [代码][代码]true[代码][代码] [代码][代码]});[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码] [代码][代码]},[代码]登录的方式就是在“我的”界面中点击授权按钮,弹出提示框后再次点击允许。使用了微信自带的wx.login接口和getuserinfo接口。上面代码这种方式能用吗?
2019-02-13 - 在使用按钮改变文字时遇到的问题
- 需求的场景描述(希望解决的问题) <!-- 下面为wxml文件中的按钮代码 --> [代码]<[代码][代码]button[代码] [代码] [代码][代码]type[代码][代码]=[代码][代码]"warn"[代码][代码] [代码][代码]bindtap[代码][代码]=[代码][代码]'onTap'[代码][代码]>[代码][代码] [代码][代码]{{btntext}}[代码][代码]</[代码][代码]button[代码][代码]>[代码] {{text}} // 下面为js文件中的代码 data: { btntext: "hello", text: "this is text", }, [代码]onTap: [代码][代码]function[代码] [代码]() { [代码][代码] [代码][代码]this[代码][代码].data.text = [代码][代码]"change" [代码][代码] [代码][代码]console.log([代码][代码]this[代码][代码].data.text) [代码][代码] [代码][代码]// this.setData({text:"change"})[代码] [代码] [代码][代码]}[代码] 在使用button的bindtap绑定onTap函数后,js中添加上述代码后,点击按钮后我认为按钮下方的文字应该改变成change,但是使用赋值方法(也就是onTap函数未注释的方法)则不能改变文字的值,然而使用setData方法可以改变文字的值。想向大家请教一下原因,谢谢大家!
2019-02-01