BUG-canvas.toDataURL-Tainted canvases may not be exported

BUG-canvas.toDataURL-Tainted canvases may not be exported

BUG集散地

2019-06-28 08:52 阅读 73 喜欢 0 canvas toDataURL

BUG 报错Tainted canvases may not be exported 。 在通过canvas 调用 toDataURL的时候出现的问题。

Tainted canvases may not be exported

出现原因: 在通过canvas drawImage 的时候,图片地址使用的是其他服务器的图片,与当前系统不是同源的,所以会在获得url的时候会因为跨域导致报错。

解决方法

在图片加载前,先设置跨域。

var img = new Image();
img.crossOrigin = 'anonymous';
img.src = 'xxx';
img.onload = function(){
    ctx.drawImage(this,0,0,this.width,this.height);
}

这个设置完成后,对应的图片获取的服务端也要设置跨域,不然图片加载还是会不报错的。

解决方法2

getURLBase64 : function(url) {
                return new Promise((resolve, reject) => {
                    var xhr = new XMLHttpRequest()
                    xhr.open('get', url, true)
                    xhr.responseType = 'blob'
                    xhr.onload = function() {
                        console.log(this);
                        if (this.status === 200) {
                            var blob = this.response
                            var fileReader = new FileReader()
                            fileReader.onloadend = function(e) {
                                var result = e.target.result
                                resolve(result)
                            }
                            fileReader.readAsDataURL(blob)
                        }
                    }
                    xhr.onerror = function() {
                        reject()
                    }
                    xhr.send()
                })
            }

将图片通过base64的方式获得,然后设置给图片即可。当然这种情况也需要nginx 设置跨域才可以获取。

这样一看的话,还是第一种更简单方便。

转载请注明出处: https://chrunlee.cn/article/bug-canvas-cross1.html


如果对你有用的话,请赏给作者一个馒头吧 ...或帮点下页面底部的广告,感谢!!

赞赏支持
提交评论
评论信息(请文明评论)
暂无评论,快来快来写想法...
推荐
在程序中,会有需要后台一直运行的场景。这一节我们来做一个监控某网站的运行状态,如果没有运行,则改变当前的图标。
扩展程序中会有需要请求外部接口获取数据的时候,如果直接在JS中写的话,会跨域,但是谷歌扩展程序支持这种情况,只需要配置一下即可。
ubuntu 配置nginx反向代理,这里简单记录下,后续再复习..
上一张中已经完成了比较简易的3D全景浏览,但是...这是写死在xml中的,对于我们实际的项目,这种情况是不可能适应的。所以,来了解下如何动态加载xml已经设置对应的热点。
前一阵子做了个图床,可以粘贴上传,查看服务器上的文件... 但是自己的服务器总是有问题..空间还小,就怕哪天没钱续费了。同事昨天想要一个七牛的图床,在网上找了下,只找到了 qiniu upload files插件,自己使用了下,挺好用,但是没有复制粘贴
功能来源于客户需求。客户有需求想把班级内所有学生的错题本生成pdf文档下载下来... 目前没有做这个功能,只有页面,还好chrome浏览器有保存pdf的功能,但是一想到这么多的学生,这么多的学科、以及这么多的参数... 还好有puppeteer
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
需求:可能会有在页面加载的时候想执行某个js,例如统计页面的DOM等等。