vue项目中引入 html2canvas ,控制台报错 Cannot assign to read only property 'className' of object '#< SVGSVGElement >'

摘要:
我遇到了这个错误,并在很长一段时间内找到了原因。一开始,我认为这是由后台管理系统的模板冲突引起的,所以我搜索了原始模板,并使用相同的方法介绍了它,但没有报告错误。啊!仔细研究错误内容。它与我使用的SVG矢量图有关吗?所以我试着注释掉所有带有svg标签的地方。结果很好!!!!原因大致可以概括如下:html2Canvas在导出图像时根据节点遍历图像,很可能无法识别svg。因此,下载图像的页面上的所有svg节点都使用img作为背景。

vue项目中引入 html2canvas ,控制台报错 Cannot assign to read only property 'className' of object '#< SVGSVGElement >'第1张

 本人遇到该错误,找了好久原因,终于找到了原因,

一开始以为是后台管理系统的模板问题有冲突导致的,于是寻找最初模板使用同样方法引入,竟然没有报错,啊!这个时候就很神伤了。

仔细研究报错内容<SVGSVGElement>,难道和我使用的SVG矢量图有关系?于是尝试把有svg标签的地方全都注释掉了,结果,好了!!!!

原因大致可以归结为,html2Canvas 在导出图片时是按照节点去遍历的,极有可能不能识别svg(模板自定义的标签)。于是在下载图片的页面内所存在的svg节点,均使用img设定为背景代替。

下边使用html2canvas导出图片的代码如下:

npm安装

npm install --save html2canvas

在需要的地方引入

import canvas2 from 'html2canvas'

html2canvas(document.querySelector('#imageDom'), { scale: 1, logging: false, useCORS: true }).then(canvas => {
        // 转成图片,生成图片地址
        if (window.navigator.msSaveOrOpenBlob) { // ie浏览器下的兼容性
          const blob = canvas.msToBlob()
          window.navigator.msSaveBlob(blob, '×××.png')
        } else { // 非ie浏览器
          const link = document.createElement('a')
          link.href = canvas.toDataURL('image/png')
          link.setAttribute('download', '×××') link.style.display = 'none'// a标签隐藏
document.body.appendChild(link) link.click()}
})
#imageDom 为需要下载图片的容器节点,由于ie浏览器下有自身的msSaveBlob方法去下载,不能使用a的download去下载。

免责声明:文章转载自《vue项目中引入 html2canvas ,控制台报错 Cannot assign to read only property 'className' of object '#&amp;lt; SVGSVGElement &amp;gt;'》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇构造函数2oracle避免在索引列上使用IS NULL和IS NOT NULL下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue项目微信端清理缓存问题解决

vue为单页面前端框架,清理缓存,常规的方式是添加html头部meta,如果逻辑里面是需要使用缓存的,这种方式不建议使用,代码片段如下: <html manifest="IGNORE.manifest"> <head> <meta charset="utf-8"> <meta name="vie...

VUE 日历签到

<style lang="scss"> @import "../assets/css/px2rem.scss"; .sign-box { 100%; min-height: 100%; background: #f5f5f5; position: relative; .top-box { padding: px2r...

一道面试题 vuex缺点?

最近去面试的时候,面试官有一道题是让我阐述用vuex的优缺点,优点倒还好说,这个缺点还真没有认识到,有道友可以帮忙解惑嘛? 2 回答 慕标5265247这种问题一般都有通用回答套路。一件挺好的东西,有什么缺点?1.成本高,即用不起。2.不用用,杀鸡焉用牛刀。3.不好用,某些情况用它解决不了4.不愿意用,有其他替代品。 反对回复2018-09-0...

Vue根据浏览器窗体变化动态设置Element Table组件的最大高度

Vue根据浏览器窗体变化动态设置Element Table组件的最大高度 这个场景应该经常遇到,比如说在一个页面有一个table,想让他数据过多的时候自动出现滚动条而不至于冲到屏幕外被隐藏,如果表格下面还有换页的话,换页直接冲没了,所以需要计算这个table表格的最大高度。 使用的是饿了吗Element组件库的table组件,有一个属性是 max-heig...

在vue或js中的异或解密和aes(des)配合使用

简单粗暴,直接贴代码: 1 //AES解密 2 decryptData(toDecrypt) { 3 var key='mochouhuaNumber1';//密钥(和后端约定的) 4 var base64 = CryptoJS.enc.Utf8.parse(key); 5 var iv=CryptoJS.enc.U...

vue-preview vue图片预览插件+缩略图样式

一、安装npm i vue-preview -S 二、main.js中  导入组件 //vue-preview 开始 import VuePreview from 'vue-preview'; // defalut install Vue.use(VuePreview) //vue-preview 结束 三、代码 1、要为缩略图设定样式 ,要...