html2canvas canvas.toDataURL safari
canvas.toDataURL 后 SecurityError: The operation is insecure.
报错
-
是否加载了跨域图片,如果是 html2canvas 报错可以 配置下
useCORS: trueallowTaint: true
-
如果是为了展示图片 配置图片跨域
var img = new Image();img.crossOrigin = '';img.onload = function () {context.drawImage(this, 0, 0);context.getImageData(0, 0, this.width, this.height);};img.src = 'https://avatars3.githubusercontent.com/u/496048?s=120&v=4';';
-
最后这样是我这样的情况
-
个人认为是 safari 的bug
-
图片加载了 svg 图, 使用 canvas.toDataURL safari 报
SecurityError: The operation is insecure.
chrome 不会 -
没有看浏览器源码 但是我个人任务 safari 判断了 svg 的命名空间的属性
-
最后解决方案:
删除了 svg xmlns 不报安全问题了 ,可以通过 html2canvas 的options 中 logging 参数来 看下加载的内容 进行处理,
不到没办法也不推荐这么解决
- <svg width="1" height="265" viewBox="0 0 1 265" fill="none" xmlns="http://www.w3.org/2000/svg">+ <svg width="1" height="265" viewBox="0 0 1 265" fill="none" >
参看文章:
-
Operation is insecure in safari · Issue #2688 · niklasvh/html2canvas · GitHub
-
解决canvas图片getImageData,toDataURL跨域问题 « 张鑫旭-鑫空间-鑫生活
-
SVG>PNG from canvas.toDataURL throws DOM exception 18 security error in Safari 9.x - Stack Overflow