html2canvas显示错位,空白,跨域的问题解决,以及一些坑

首先目前几个rc版本可能表现是不一致的。比如rc5就很容易有问题。我目前使用rc1.感觉这个问题少一些。值得注意的是,如果使用Npm安装的话,要么锁版本,要么指定明确的版本。即:

// 使用--sav-exact 锁定版本
npm install html2canvas@1.0.0-rc1 --save-exact

// 或者文件目录中包含了package-lock.json
+ src
+ package.json
+ package-lock.json
+ ....

空白的问题或者错位的问题。与需要生成Html所在可视区可能有关系。我这里发现如果html结构正好在可视区内外各显示一部分,那么有可能出现错位或者空白。我这里解决方案是使用固定定位,定位到可视区之外。比如:

.canvas-html {
	position: fixed;
	top:0;
	left:-200%;
}

然后设置

{
	// offset, 可尝试调整一下对应的参数
	x: 0
}

最后关于跨域的问题,首先本地图片,同域的图片是没问题的。其次对于与当前域名不同的图片,如果图片所在服务器或者CDN不支持跨域,那是不可能绘的出来的,也就别费力气了。所以先和相关人协商让他们支持跨域。其次配置html2canvas的参数如下

{
	useCORS: true
}

值得注意的,如果本身是同域,也就是不涉及跨域,就别加这个属性。否则如果图片服务器不支持跨域导致本来没问题,结果出现跨域问题。

更多参数调整,参考官方文档 http://html2canvas.hertzen.com/configuration