有同学咨询,在开发APP和小程序时,使用uQRCode来生成二维码,之前用着好好的,功能一切正常,但是突然某个时刻不能用了,生成时报错:
//小程序端错误信息
[渲染层错误] [Component] <canvas>: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0. Error: Failed to execute 'drawImage' on 'CanvasRenderingContext2D': The image argument is a canvas element with a width or height of 0.
at l.methodsHandler [as _invokeCanvasMethod] ([http://127.0.0.1:30752/](http://127.0.0.1:30752/)**pageframe**/**dev**/WAWebview.js?t=wechat&v=3.16.2:1:2146727)(env: Windows,mp,2.01.2510290; lib: 3.16.2)
qrcode.vue:118 {errMsg: "canvasToTempFilePath:fail executeCanvasMethod fail… is a canvas element with a width or height of 0."}(env: Windows,mp,2.01.2510290; lib: 3.16.2)
//APP端错误信息
返回[object DOMException] at view.umd.min.js:1这是怎么回事呢?今天丁老师不仅给你修复,还给你分析解答。
首先,看一下这位同学使用uQRCode的生成二维码的代码:
uQRCode.make({
canvasId:'qrcode',
componentInstance:this,
text:'丁老师软件顶呱呱',
size:360,
margin:10,
backgroundColor:'white',
foregroundColor:'#000000',
fileType:'jpg',
correctLevel:uQRCode.errorCorrectLevel.H,
success:res=>{
console.log('ok')
},
fail:(err)=>{
uni.hideLoading();
console.error(err);
}
});从代码上看,这个方法是没有任何问题的,丁老师也有亲测复制这个代码进行测试,是可以正常使用的,那么问题到底出在哪里呢?在同样的环境下,代码没有变动过,之前用着好好的,突然不能用了,那就说明,肯定不是这段代码的原因,而是别的地方除了问题。
从代码上看,我们可以看到,这个uQRCode是生成到一个叫qrcode的Canvas对象上,我们见一下这个对象:
<view class="hidden">
<canvas class="canvas" canvas-id="qrcode" :style="'width:'+qrcode_width+'px;height:'+qrcode_width+'px;'" />
</view>这个canvas对象本身没有什么问题,但为什么外层多了一个hidden的class,嗯。。检查一下。
.hidden {display:none;}突然发现,这个.hidden是隐藏的,加了display:none;嗯,问题应该出在这里了,这个canvas被隐藏了,猜测应该是uQRCode找不到对象,所以就生成失败,我们把这个hidden的display:none去掉一下进行测试。
果然,功能恢复正常,uQRCode又可以生成二维码了!原来如比!这个uQRCode关联的Canvas对象,是不能隐藏的啊!你隐藏了,uQRCode就找不到canvas对象,就没法正常生成啊!怪不得你说代码没有动过就不能使用了,因为你没有动过js的代码,但是改了css,影响到功能使用了!
我明白这位同学的意思,他可能想生成二维码做后续使用,所以不想让这个canvas显示出来,但是要记得啊!canvas本身和他的上层,千万不能隐藏,隐藏了就不能用了!如果真想要隐藏,也不要使用display:none的方式,可以使用其他方式来隐藏,即主打一个视觉看不见,但他还存在的方式进行隐藏。
//附:非display:none的隐藏方式
width:0;height:0;opacity:0;position:absolute;z-index:-99;overflow:hidden;微信支付常见问题及解决办法
应用场景场景1:使用APP或小程序,分享给别人的网页内容,当用户打开这个网页内容时,可以自动打开APP或小程序。场景2:短信群发给目标人群,短信内容包含短网址,打开短网址后,可以打开APP或小程序。实现方法:无论是场景1还是场景2,其技...
在开发CodeIgniter的上传功能时,提示upload path does not appear to be valid,说是上传路径错误,但是仔细检查了设置的路径是对的。怎么还出现这个提示呢?经过丁老师研究,是因为CodeIgni...
经常有客户咨询丁老师,想对自己开发的软件申请软件著作权,都需要什么材料,需要多少钱,办理下来需要多久呢?今天丁老师就对这个问题进行统一解答。申请软著所需材料1.软件程序源码,要求前30页和后30页,每页不少于50行代码。2.软件用户手册...
mui的toast默认是在底部的,并且没有参数设置位置,经过研究发现可以通过修改css的方式设置位置,具体方法如下:1.mui toast设置type为divmui.toast('hello', { type: 'd...
废话不多说,直接上货。在微信开发者工具调试栏,找到Sensor(传感器)。Geolocation,勾选启用,下边输入经纬度即可!
在使用idea旗下的产品,如intellij idea,php storm,web storm时,有的时候编辑前端页面JS,在换行时经常会自动出现个}大括号,这一点程序不是很智能,其实后边都已经有括号了。比如下图这样:那么如何解决这个问题呢...
宝塔系统相关问题解决方法