- wx.setPageStyle()这个东西有人会用吗?
[图片] wx.setPageStyle()可以改变里面的样式,但是我想知道怎么实现下面的这个 [图片]
2021-05-26 - 小程序销毁的时机
小程序会被销毁的三大场景: 1 当钱小程序进入后台后,如果很长时间-目前是 30 分钟-后没有再次进入,小程序会被销毁。 2 当小程序占用系统资源过高,会被系统销毁或被微信客户端主动回收。 3 在 iOS 上,当微信客户端在一定时间间隔内连续收到系统内存告警时,会根据一定的策略,主动销毁小程序,并提示用户 (运行内存不足,请重新打开该小程序)。 如果小程序中有过多占用内存的场景,建议使用 wx.onMemoryWarning 监听内存告警事件,进行必要的内存清理。
2022-05-21 - [开盖即食]小程序Canvas官方新版API实战
[图片] [图片] 最近本人在开发一个新项目的时候,注意到官方在2.9.0开始支持了一个canvas 2D的新API,同时对webGL上支持也有了很大的改进,相信很多人用canvas的组件做一些分享海报,战绩和新闻帖功能。 [图片] 这里是新的引入方式。 官方文档地址: https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html 那么新的canvas2D API有啥好处呢? 原本的API微信有做一定的修改,现在全面支持源生H5 JS的写法,迁移H5的老代码变成更加容易,学习成本更低 修复了一些诡异的BUG,例如原本在IOS早期版本写法顺序会导致clip()图片裁切失效等~ 性能上的优化和提升,复杂动画上帧数明显 举例写法上的一些改变: 1、设置font的写法: [代码]//原本(传值的写法) ctx.setFontSize(20); ctx.fillText('MINA', 100, 100) ctx.draw() //现在(和源生H5写法一致,赋值) ctx.font = "16px"; ctx.fillStyle = 'blue'; //可以直接写颜色,原本的不支持 //不需要 ctx.draw() [代码] 2、获取并添加图片写法: [代码]//原本 //使用的是 wx.getImageInfo的方法 wx.getImageInfo({ src: mainImg,//服务器返回的图片地址 success: function (res) { console.log(res); ctx.drawImage(res.path, 0, 0); ctx.draw(true); }, fail: function (res) { //失败回调 } }); //现在 //可以直接img.onload调用 const headerImg = canvas.createImage(); headerImg.src = headImage;//微信请求返回头像 headerImg.onload = () => { ctx.save(); ctx.beginPath()//开始创建一个路径 ctx.arc(38, 288, 18, 0, 2 * Math.PI, false)//画一个圆形裁剪区域 ctx.clip()//裁剪 ctx.drawImage(headerImg,0,0); ctx.closePath(); ctx.restore(); } [代码] 3、将canvas生成虚拟地址便于下载(重点): [图片] 由于官方文档没有写清楚,误导了挺多人的。这里canvas对象必须通过选择器获取,并获得对应的node节点。 [代码]async saveImg() { let self = this; //这里是重点 新版本的type 2d 获取方法 const query = wx.createSelectorQuery(); const canvasObj = await new Promise((resolve, reject) => { query.select('#posterCanvas') .fields({ node: true, size: true }) .exec(async (res) => { resolve(res[0].node); }) }); console.log(canvasObj); wx.canvasToTempFilePath({ //fileType: 'jpg', //canvasId: 'posterCanvas', //之前的写法 canvas: canvasObj, //现在的写法 success: (res) => { console.log(res); self.setData({ canClose: true }); //保存图片 wx.saveImageToPhotosAlbum({ filePath: res.tempFilePath, success: function (data) { wx.showToast({ title: '已保存到相册', icon: 'success', duration: 2000 }) // setTimeout(() => { // self.setData({show: false}) // }, 6000); }, fail: function (err) { console.log(err); if (err.errMsg === "saveImageToPhotosAlbum:fail auth deny") { console.log("当初用户拒绝,再次发起授权") } else { util.showToast("请截屏保存分享"); } }, complete(res) { wx.hideLoading(); console.log(res); } }) }, fail(res) { console.log(res); } }, this) }, [代码] 分享个canvas海报的代码片段: [图片] 片段名: PoCf4emw7TgE 片段link: https://developers.weixin.qq.com/s/PoCf4emw7TgE [图片] [图片] 总结,相对之前还要看官方文档的canvas自定义API,现在写起来更加的方便,老代码迁移起来得心应手,只要你之前会canvas,那么各种效果和动画,拿来就怼,没什么大问题~ 一些奇怪的问题(注意!!!) canvas 2d 目前(2020年4月3日)还不支持真机调试,会报错!!! IDE工具 1.02.2003190 直接保存新版本canvas的API图片是打不开的,但是直接用手机保存在相册是没问题的,请更新到1.02.2003250 最新版即可解决~ 一些老款手机用新的API保存图片会有报错问题,如华为NOTE10,请更新系统到能支持的最新,且微信也是,即可解决~ 部分Android设备诡异的闪退和报错 [图片] 这种有可能是代码写法的问题,比如: [代码]//缺省写法 会导致部分Android机器 闪退 ctx.font = "bold 16px"; ctx.fillStyle = "#000" //在canvas 2D的写法中,所以写法必须规范且完整 ctx.font = "normal bold 12px sans-serif"; ctx.fillStyle = '#707070'; [代码] 所以在canvas 2D 的环境,所以写法必须原始且规范,不能用缺省写法,不然就会有诡异的闪退/报错。 后续:官方在7.0.13的Android版本已修复。 https://developers.weixin.qq.com/community/develop/doc/00088c13e1437890692afd8d85ec00 看完觉得有帮助记得点个赞哦~ 你的赞是我继续分享的最大动力!^-^
2020-05-09 - 小程序web-view关闭后,页面音频没有关闭
问题描述: 在[代码]web-view[代码]的src中,引入了一个HTML5页面,这个页面有个自动播放的音频。 在小程序中,点击右上角关闭小程序后,[代码]web-view[代码]页面中的音频依然会播放。 期待现象 期待关闭小程序之后,音频也停止。 通过查找文档,发现没有直接提供方法,网上找了一圈之后,尝试的方案也都无法实现。 所以我这里想到的思路是,当用户关闭小程序时,应该销毁掉[代码]web-view[代码]。可惜,目前没有这个接口。 所以我就利用了模拟的方式来实现,当前小程序页面[代码]onHide[代码]时,就将[代码]web-view[代码]的页面[代码]src[代码]属性清空。 后来经过测试发现,在[代码]ios[代码]平台下,需要制定一个url,在[代码]android[代码]平台下只需要清空。另外为了防止造成缓存,给[代码]url[代码]后面添加了一个随机的参数。 以下是代码片段。 [代码]<template> <view> <web-view :src="webUrl"></web-view> </view> </template> <script> export default { data() { return { webUrl: 'https://demo.com/weixin/index.html' } }, onLoad() { }, onHide(){ // webview关闭后,刷新url。否则会造成音乐在后台继续播放的bug if (wx.getSystemInfoSync().platform == "ios") { this.webUrl = 'https://demo.com/weixin/index.html?redirect=true'; }else{ // android系统下只能给空值 this.webUrl = ';' } }, onBackPress(){ }, methods: { } } </script> <style> </style> [代码] 注意: 以上代码是通过uni-app开发的。如果在微信开发者工具中编辑,需要符合微信小程序的语法。 2019年6月2日 更新 经过测试,发现以上代码并不是最好的选择。因为当用户隐藏小程序后,在最近使用的小程序中,该小程序会继续在后台保留一段时间。如果是替换[代码]web-view[代码]的url,会造成音乐继续播放。 另外一个问题就是,我以上代码判断了ios和andorid两个平台。其实现在想来并不需要。 综上所述,以上代码参考意义并不大,请使用监听[代码]hashchange[代码] 方式来判断。代码如下: 小程序中代码 [代码]<view class="page-body"> <view class="page-section page-section-gap"> <web-view src="https://demo.com/weixin/index.html#show={{showed}}"></web-view> </view> </view> Page({ data: { showed: false }, // 小程序在前台 onShow: function(){ this.setData({ showed: true }); }, // 小程序在后台 onHide: function() { this.setData({ showed: false }); } }) [代码] web-view中代码 [代码]window.addEventListener("hashchange", () => { var globalAudio = document.getElementById("player"); //获取audio HTMLDOM const hashData = parseURL(window.location.hash.slice(1)); if (hashData.show) { const isShow = hashData.show === 'true'; if (isShow) { //切到前台 if (globalAudio.paused) { globalAudio.play(); } } else { //切到后台 if (globalAudio.play) { globalAudio.pause(); } } } }, false); function parseURL(e) { var t, n, r, i = e, s = {}; t = i.split("&"), r = null, n = null; for (var o in t) { var u = t[o].indexOf("="); u !== -1 && (r = t[o].substr(0, u), n = t[o].substr(u + 1), s[r] = n) } return s } [代码] ** 总结 ** 通过[代码]onShow[代码]和[代码]onHide[代码]设置属性[代码]showed[代码]的值,来判断用户的小程序是在前台还是后台。 因为是给[代码]web-view[代码]的[代码]src[代码]动态修改[代码]hash[代码]值,所以不会造成页面刷新,相比直接修改[代码]src[代码]会更好。 然后在[代码]web-view[代码]所在的页面中,监听[代码]hashchange[代码]事件,在事件中,判断[代码]hash[代码]属性[代码]show[代码]的[代码]true false[代码]值,空值音乐的暂停与播放。 2019年6月6日 更新 本来以为监听[代码]hash[代码]值的变化,已经是能完美的解决这个问题了。但是经过测试之后,发现了严重的问题:安卓系统下,用户点击物理返回按键,会无法退出小程序 这个问题造成的原因是:每次修改[代码]hash[代码]值时候,都会添加一条历史浏览记录。而用户点击返回按钮时,就相当于点击浏览器的返回按钮。自然就是会返回多次才能回到第一页,然后才退出掉小程序。 这样的话,用户体验就非常不好。我首先想到的是,调用[代码]wx.miniProgram.navigateBack[代码],直接返回。但是会报一个错误: [图片] 意思就是说,我当前的[代码]web-view[代码]是第一页,不能再返回了。 最后还是通过阅读微信文档,发现了[代码]onPageStateChange[代码]这个监听事件。可以判断微信小程序是否在前台。我最开始的时候,测试过这个接口,当时当时微信客户端没有升级,所以我一直以为这个接口是不能用的呢。 其实这个接口是完全可以用的。只不过需要微信版本在[代码]7.0.3[代码]。 这样的话,就可以将代码优化得非常少了。 [代码]// wxml <view> <web-view src="https://demo.com/weixin/index.html"></web-view> </view> // 微信中的js Page({ }) // web-view页面中的js wx.ready(function() { var globalAudio = document.getElementById("player"); //获取audio HTMLDOM WeixinJSBridge.on('onPageStateChange', function(res) { // 注意:res.active返回的是字符串类型的true和false if(res.active == 'true'){ globalAudio.play(); }else{ globalAudio.pause(); } }); }); [代码] 主要就是,不在采用监听hash值的变化了,直接使用微信提供的接口。非常好用。
2019-06-06 - 小程序内怎么调试web-view?
开发工具上在web-view页面内点击鼠标右键有个调试的选项 需要在真机上调试需要自行引入vconsole:https://github.com/Tencent/vConsole/blob/dev/README_CN.md
2019-10-09 - 小程序中图片二维码、小程序码,长按识别支持的情况
因为看到最近还有人刷到这篇文章还有收藏的,所以特别说明一下: 以下是2021年5月31日时候测试的结果,并不一定与现在的情况相符。现在啥情况,我也不知道,已经不咋做小程序了。所以大家实际使用时候,请大家还是再测测。 上面这段话更新于2021年10月11日 下面是原文 ==================================================================================================================== 最近小程序中的图片支持长按识别了,总结一下几种情况下: 测试时间:2021-5-31 微信版本:8.0.6 当前时间最新 image标签 + show long press menu <image src="https://img.qr.com/qr.jpg" style="width: 100%;" mode="widthFix" show-menu-by-longpress="{{true}}"></image> ✅ 识别小程序码 - ✅ 跳转小程序 ✅ 识别群二维码 - ❌ 跳转到加群页面 ✅ 识别名片二维码 - ❌ 跳转到加好友页面 ❌ 识别小程序二维码 wx.previewImage ✅ 识别小程序码 - ✅ 跳转小程序 ✅ 识别群二维码 - ✅ 跳转到加群页面 ✅ 识别名片二维码 - ✅ 跳转到加好友页面 ❌ 识别小程序二维码 web-view ✅ 识别小程序码 - ✅ 跳转小程序 ✅ 识别群二维码 - ✅ 跳转到加群页面 ✅ 识别名片二维码 - ✅ 跳转到加好友页面 ❌ 识别小程序二维码 总结,目前微信已经开放了在小程序中长按识别。但是似乎还有一些bug,image标签可以识别到,但是点了没反应。
2021-10-11 - 小程序识别二维码
怎么识别小程序里面的二维码
2018-09-03 - 小程序多级分销知多少
微信小程序开发者对于小程序生态内的多级分销存在疑惑,今天小编就跟大家一起来梳理下关于多级分销的几个关键点,帮助大家了解哪些在平台内是违规分销行为。 什么是违规分销?三级或三级以上的分销模式就属于违规分销。微信生态拒绝违规分销行为。 二级分销模式:A(厂家)→B(代理) 三级分销模式:A(厂家)→B(代理)→C(代理) 对违规分销行为有初步的了解后,我们来看看微信小程序中常见的具体违规分销案例: l以电商小程序为载体,通过培养用户粉丝,制定分级佣金的形式进行多级分销的行为 [图片] l以“无实物商品”、“虚拟币”多层级分销盈利的庞氏骗局 [图片] l通过购买实物商品获得会员资格发展下线,并以直接或间接发展人员数量和销售业绩作为计酬依据。 [图片] l打着“国家扶持”“民族资产解冻”“民族大业”等旗号的“国家工程” [图片] l以共享经济、物联网、中国梦等名义,大肆发展下线会员牟取暴利 [图片] l免费旅游”“边旅游边赚钱”的旅游骗局,以巨额回报为噱头的金融诈骗 [图片] l以少量资金投入,通过不断的拆分裂变,获得高额盈利吸引用户参与。 [图片]
2020-03-18 - 公众号授权给第三方平台后,授权提示 redirect_uri 参数错误 ?
[图片] 上图为授权页,但是现在使用第三方平台设置的公众号开发域名授权登录提示 redirect_uri 参数错误,确认参数都没有问题。想问一下各位大佬,这会是什么原因导致的呢?还是说有什么步骤没有弄对?
2019-10-18 - 我的公众号是订阅号,通过公众号开通的小程序可以申请微信支付吗?
我的公众号是订阅号,通过公众号开通的小程序可以申请微信支付吗?
2020-02-28 - 微信小程序开通微信支付一定需要服务号吗?
我有一个微信小程序,现在想开通微信支付功能,但是在准备申请微信支付的时候发现,这里写了微信支付支持服务号接入支付功能。 但是我没有服务号,只有一个通过认证的订阅号。 现在想知道在没有开通服务号的情况下小程序可以开通微信支付吗?(仅在小程序内使用)[图片]
2019-09-11 - ios下拉系统菜单会结束掉正在播放的音频
- 当前 Bug 的表现(可附上截图) ios上拉系统菜单会结束掉正在播放的音频,不会触发音频的监听函数,也不会触发onhide和onshow。 [图片] - 预期表现 - 复现路径 - 提供一个最简复现 Demo
2019-05-16 - InnerAudioContext在ios只有第一次有声音,安卓正常
[图片] 第一次都能log所有信息,后面连onError都没有log
2019-05-13 - 退出小程序后音频继续播放功能的调整
各位开发者: 大家上午好。 当前小程序为开发者提供了音频播放接口[代码]wx.getBackgroundAudioManager[代码] 。该接口除支持更丰富的音频格式外,为了方便开发者为用户提供不间断的音频服务体验,开发者可以通过该接口实现在退出小程序后继续播放音频的能力。 在该功能发布初期,退出小程序后继续播放音频的能力默认为开启状态。后来我们发现很多小程序只需要在小程序内的音频播放能力,但在使用该接口时,若要在退出小程序后停止播放音频,在开发实现方面,较不方便。因此为了让开发者可以更灵活的使用该能力,从微信客户端6.7.2版本开始,该策略调整为:若想要在退出小程序后继续播放音频,需要在 app.json 中配置 [代码]requiredBackgroundModes[代码] 属性,否则在退出小程序后将默认自动停止音频播放。开发版和体验版已于2018年8月23日生效,详见社区公告 小程序web-view组件、音频播放功能调整说明 。 具体方法如下 { "pages": ["pages/index/index"], "requiredBackgroundModes": ["audio"]}详见《小程序开发文档》 2019年1月24日起新提交发布的正式版本将会受到此调整的影响。需要各位开发者注意,2019年1月24日起新提交发布的正式版本若未在代码中配置 [代码]requiredBackgroundModes[代码] 属性,则将在退出小程序后自动停止播放音频。该调整策略在微信客户端6.7.2以上版本生效。 微信团队
2019-01-15 - 该小程序可能导致微信响应变慢被终止
从搜索列表中点击小程序提示“该小程序可能导致微信响应变慢被终止”,想知道是什么原因造成这样的提示,有没有解决方案 小程序名称:安吉旅游攻略
2018-01-23