有同学咨询,在开发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;丁老师淘宝采集插件demo
有同学咨询,使用Visual Studio工具C#开发的Winform程序,生成后软件目录全是大量dll文件,看起来杂乱无章,有没有什么办法能让他统一放到一个文件夹里边呢?丁老师对此问题进行解答。为什么会产生大量的dll文件?因为在使用...
经常有小伙伴问丁老师,说扫描出来的PDF图片,都是一个一个的,怎么样把他们合并成一个文件呢?我说你去下载一个PDF工具就好了呀,有某某PDF共阅读器、编辑器嘛。小伙伴说不行呀丁老师,因为网上的这些PDF工具有以下缺点:1.体积太大。动辄...
丁老师教你如何用php调用美图秀秀插件实现头像上传的功能。
废话不多说,直接上货。在微信开发者工具调试栏,找到Sensor(传感器)。Geolocation,勾选启用,下边输入经纬度即可!
videojs是一款非常不错的html video播放器插件,很多同学经常在群里问我,说丁老师这个videojs怎么设置为宽度或者高度自适应呢,不想把video的width和height写死,有没有什么办法呢。丁老师经过研究发现啊,vide...
在开发微信小程序的过程中,生成的是带有logo的小程序二维码,并且这个二维码不是通用的二维码,而是只能用微信打开的专属二维码,如图:遇到这样一个需求,生成的二维码要方形的通用二维码,并且不能带有小程序的logo。这种该怎么实现呢?经过查询,...
在使用PHP框架CI时,有个很恶心的地方就是他的URL需要带上index.php,比如我要建一个user模块,想要实现www.xxx.com/user/的效果,但是在CI框架下必须要www.xxx.com/index.php/user这样才...