Js Canvas画图加载远程连接报错:
Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.
报错Screenshot
尽管没有CORS授权也可以在 canvas 中使用图像, 但这样做就会污染(taints)画布。 只要 canvas 被污染, 就不能再从画布中提取数据, 也就是说不能再调用 toBlob()
, toDataURL()
和 getImageData()
等方法, 否则会抛出安全错误(security error).
这实际上是为了保护用户的个人信息,避免未经许可就从远程web站点加载用户的图像信息,造成隐私泄漏。
代码实例:
var canvas = window.document.createElement('canvas'); var ctx = canvas.getContext('2d'); var image = new Image(); image.src = 'xxxx?7c44414156d579012ee2c9845b276e3e'; image.onload = () => { canvas.width = 500; canvas.height = 500; ctx.drawImage(image, 0, 0, 500, 500); var imgSrc = canvas.toDataURL('image/png', 1); console.log(imgSrc); } /* VM1604:10 Uncaught DOMException: Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. at Image.image.onload (<anonymous>:10:23) */
解决方案:
- 允许远程服务器Access-Control-Allow-Origin开启跨域
- 图片服务放在同一台服务器
相关推荐
1. **检查错误信息**:DOMException的错误类型是关键,如"NotFoundError"表示尝试访问的节点不存在,"InvalidCharacterError"可能是因为字符串中包含了非法字符等。理解错误类型有助于我们定位问题。 2. **审查代码...
Uncaught DOMException: Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported. 关键词 canvas.toDataURL() crossOrigin Access-Control-Allow-Origin 前言 最近在...
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法
将图片转为base64的好处 将图片转换为Base64编码,可以让你很方便地在没有上传文件的条件下将图片插入其它的网页、编辑器中。 这对于一些小的图片是极为方便的,因为你不需要再去寻找一个保存图片的地方。...
本文介绍了Canvas引入跨域的图片导致toDataURL()报错...Failed to execute ‘toDataURL’ on ‘HTMLCanvasElement’: Tainted canvases may not be exported. 经过了解,需要在图片首次引用时,设置crossOrigin字段: