安卓7.0版本及以上 html2canvas 无法获取内部canvas内容

1,201 阅读1分钟

在项目中遇到的问题,活动页生成二维码,然后使用 html2canvas 连同背景div一起生成图片,保存到手机本地。 结果安卓部分机型,保存的图片,只有背景,没有通过qrcanvas生成的二维码。 经过初步测试发现,主要是安卓7.0及以上版本会存在这个问题。

初步对问题的猜测是安卓7.0及以上版本,html2canvas 无法获取内部canvas元素的内容。

原来有问题的代码:

created() {
    let that = this;
    that.$nextTick(function () {
        var canvas1 = qrcanvas({
            data: decodeURIComponent(that.$route.query.url), //分享链接(根据需求来)
            size:128 //二维码大小
        });
        document.getElementById("qrcode").innerHTML = '';
        document.getElementById('qrcode').appendChild(canvas1);
    })
}

发现希望生成的活动分享图片,其img包裹的背景图片不存在使用html2canvas无法获取的问题,所以

解决方法如下:

created() {
    let that = this;
    that.$nextTick(function () {
        var canvas1 = qrcanvas({
            data: decodeURIComponent(that.$route.query.url), //分享链接(根据需求来)
            size:128 //二维码大小
        });
        const tempImg = document.createElement('img');
        tempImg.src = canvas1.toDataURL();
        document.getElementById("qrcode").innerHTML = '';
        document.getElementById('qrcode').appendChild(tempImg);
    })
}

经测试可以解决现有问题。至于为什么安卓7.0及以上版本有这个问题,暂时未知。