看到类似的帖子,这2个报错,我都有,在预览模式正常
我知道现在仍然不支持真机调试!!!!!!!!!!!!!
但是上线后,发现 IOS 是正常的,Android 大量用户反馈 生成海报的时候闪退?!!!
不能用真机调试,如何排查问题呢???
系统版本 Android 7.0.12 小米10
核心代码段
query.select('#posterCanvas')
.fields({ node: true, size: true })
.exec(async (res) => {
const canvas = res[0].node;
//保存canvas实例
self.canvasObj = canvas;
const ctx = canvas.getContext('2d');
// canvas.width = res[0].width;
// canvas.height = res[0].height;
const dpr = wx.getSystemInfoSync().pixelRatio;
canvas.width = res[0].width * dpr;
canvas.height = res[0].height * dpr;
ctx.scale(dpr, dpr);
ctx.clearRect(0, 0, 320, 410); //清空画板
ctx.fillStyle = '#fff';
ctx.fillRect(0, 0, 320, 410);
let txtLeftPos = 65;
ctx.textBaseline = "top";
ctx.textAlign = 'left';
// //成绩
ctx.font = "normal bold 44px"; //设置字体大小,默认10
ctx.fillStyle = '#000'; //文字颜色:默认黑色
ctx.fillText(shareContent, txtLeftPos, 335)//绘制文本
function canvasWxHeader(headImageLocal) {
const headerImg = canvas.createImage();
console.log(headImageLocal)
headerImg.src = headImageLocal;
headerImg.onload = () => {
ctx.save();
ctx.beginPath()//开始创建一个路径
ctx.arc(38, 288, 18, 0, 2 * Math.PI, false)//画一个圆形裁剪区域
ctx.clip()//裁剪
ctx.drawImage(headerImg, 20, 270, 36, 36);
ctx.closePath();
ctx.restore();
//关闭loading
wx.hideLoading();
self.setData({
hasShowPoster:true
})
}
}
let defaultHeadUri = '../images/ad.png';
canvasWxHeader(defaultHeadUri);
});
我自己找到原因了,太诡异了
在新版的canvas2D api中,如果你的一些写法不完整,就会出现Android 机器闪退的BUG,比如
//缺省写法 会导致部分Android机器 闪退 ctx.font = "bold 16px"; ctx.fillStyle = "#000" //在canvas 2D的写法中,所以写法必须规范且完整 ctx.font = "normal bold 12px sans-serif"; ctx.fillStyle = '#707070';
canvas不支持真机调试