前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地。javascript
首先对于网页截图,我用的是canvas实现,获取你须要截图的模块的div,从而使用canvas对你须要的模块进行截图。html
咱们先来引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/java
<script type="text/javascript" src="js/html2canvas.js"></script> <script type="text/javascript" src="js/html2canvas.min.js"></script>
div按钮代码canvas
<div><a id="down" href="" download="downImg">下载按钮</a></div> //href用来取到值 要写个空 down load是下载图片出来的名称
jsp代码api
function test() {
var canvas2 = document.createElement("canvas");
//建立一个新的canvas let _canvas = document.querySelector('#dijit__TemplatedMixin_0');
//这里面填写 你须要截图的div var w = parseInt(window.getComputedStyle(_canvas).width); var h = parseInt(window.getComputedStyle(_canvas).height); canvas2.width = w * 2; canvas2.height = h * 2;
//将canvas画布放大2倍或者更多,而后盛放在较小的容器内,就显得不模糊了 canvas2.style.width = w + "px"; canvas2.style.height = h + "px"; var context = canvas2.getContext("2d"); context.scale(2, 2); //指图片偏移 html2canvas(document.querySelector('#dijit__TemplatedMixin_0'), { //写须要截图的div taintTest : false, useCORS : true, allowTaint :false, //这三串代码解决跨域问题
canvas : canvas2 }).then(function(canvas) { document.querySelector("#down").setAttribute('href',canvas.toDataURL());
//down设置为你的点击键 单机下载 });
window.onload = test;
记得div要选对,否则会出现下载出来htm文件和txt文件。跨域
截图出来后,因为个人网址上有百度地图的api,地图图片等等一些东西,用canvas网页进行截图是就会发现全部图片的地方都是空白。这就是由于跨域。浏览器
来说一下跨域问题,我举个例子说明这个跨域,好比个人网页里面有的图片不是来自于本身的服务器。那么,这张图片就和这个网页不是同域,那么html2canvas就没法对这种图片进行截图,若是你的网站的全部图片都放在单独的图片服务器上,那么用html2canvas对整个网页进行截图是就会发现全部图片的地方都是空白。服务器
跨域问题网上好多大佬说用代理服务器来解决,可是感受太麻烦,后来我使用了小段代码就OK了。jsp
taintTest : false, useCORS : true, allowTaint :false,
//注:useCORS:true和allowTaint:true 这两个都是来解决跨域问题的,可是并不能够一块儿使用,若是同时使用会出现错误。
对于截图模糊就调整canvas画布大小好比我上面写的*2,画布调大,容器小,截图天然就清楚了网站
截图成功呈现