当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JS中使用cavas截图网页并解决跨域及模糊问题

JS中使用cavas截图网页并解决跨域及模糊问题

2018年11月30日  | 移动技术网IT编程  | 我要评论

前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地。

首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图。

我们先来引入canvas的js文件,js文件获取地址官网主页:

<script type="text/javascript" src="js/html2canvas.js"></script>
<script type="text/javascript" src="js/html2canvas.min.js"></script>

div按钮代码

<div><a id="down" href="" download=" rel="external nofollow" downimg">下载按钮</a></div>
//href用来取到值 要写个空 down load是下载图片出来的名称

jsp代码

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; 

截图出来后,由于我的网址上有百度地图的api,地图图片等等一些东西,用canvas网页进行截图是就会发现所有图片的地方都是空白。这就是因为跨域。

来讲一下跨域问题,我举个例子说明这个跨域,比如我的网页里面有的图片不是来自于自己的服务器。那么,这张图片就和这个网页不是同域,那么html2canvas就无法对这种图片进行截图,如果你的网站的所有图片都放在单独的图片服务器上,那么用html2canvas对整个网页进行截图是就会发现所有图片的地方都是空白。

跨域问题网上好多大佬说用代理服务器来解决,但是感觉太麻烦,后来我使用了小段代码就ok了。

tainttest : false,  
usecors : true,   
allowtaint :false, 
//注:usecors:true和allowtaint:true 这两个都是来解决跨域问题的,但是并不可以一起使用,如果同时使用会出现错误。

对于截图模糊就调整canvas画布大小比如我上面写的*2,画布调大,容器小,截图自然就清楚了

截图成功呈现

总结

以上所述是小编给大家介绍的js中使用cavas截取网页并解决跨区及模糊问题,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网