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

 更新时间:2018年11月13日 11:54:05   作者:布布布布  
这篇文章主要介绍了JS中使用cavas截取网页并解决跨域以及模糊问题 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

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

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

我们先来引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/

<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截取网页并解决跨区及模糊问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • JavaScript中的undefined学习总结

    JavaScript中的undefined学习总结

    这篇文章主要是对JavaScript中的undefined进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • css客齐集社区头像显示效果

    css客齐集社区头像显示效果

    这个例子,首先是把SPAN里的内容用display:none;干掉,就是不显示; 然后在A:HOVER时,再把SPAN里的内容display:block; 就是显示出来;同时定义一下SPAN的位置; 其它代码很简单,但有人说看不太懂;我就简单说一下;
    2008-06-06
  • js实现盒子移动动画效果

    js实现盒子移动动画效果

    这篇文章主要为大家详细介绍了js实现盒子移动动画效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • js中跨域方法原理详解

    js中跨域方法原理详解

    这篇文章主要介绍了js中跨域方法原理详解的相关资料,需要的朋友可以参考下
    2015-07-07
  • js随机生成一个验证码

    js随机生成一个验证码

    这篇文章主要为大家详细介绍了js随机生成一个验证码的具体方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • 完美解决el-input输入框输入数组传参报错问题

    完美解决el-input输入框输入数组传参报错问题

    这篇文章主要介绍解决el-input输入框输入数组传参报错问题,该问题是由于JSON规范要求字符串必须使用双引号(")而非单引号(')导致的,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2025-05-05
  • js+div实现图片滚动效果代码

    js+div实现图片滚动效果代码

    本篇文章主要是对js+div实现图片滚动效果的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-02-02
  • js复制网页内容并兼容各主流浏览器的代码

    js复制网页内容并兼容各主流浏览器的代码

    js 复制网页内容的方法代码有很多不过要兼容各浏览器就不多了,下面有个不错的方法,大家可以尝试操作下
    2013-12-12
  • 微信小程序拍卖商品详情页设计与交互实现代码(含倒计时、实时更新出价)

    微信小程序拍卖商品详情页设计与交互实现代码(含倒计时、实时更新出价)

    这篇文章主要介绍了微信小程序拍卖商品详情页设计与交互实现代码(含倒计时、实时更新出价),本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • javascript生成随机颜色示例代码

    javascript生成随机颜色示例代码

    这篇文章主要介绍了使用javascript如何生成随机颜色,需要的朋友可以参考下
    2014-05-05

最新评论