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


Posted in Javascript onNovember 13, 2018

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

首先对于网页截图,我用的是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 相关文章推荐
网页和浏览器兼容性问题汇总(draft1)
Jun 01 Javascript
基于jquery的气泡提示效果
May 31 Javascript
jQuery EasyUI API 中文文档 - Dialog对话框
Nov 15 Javascript
jquery中dom操作和事件的实例学习-表单验证
Nov 30 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
一个JavaScript的求爱小特效
May 09 Javascript
JSON遍历方式实例总结
Dec 07 Javascript
原生实现一个react-redux的代码示例
Jun 08 Javascript
js实现上下左右键盘控制div移动
Jan 16 Javascript
JQuery获得内容和属性方法解析
May 30 jQuery
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
Jul 30 Javascript
原生js实现购物车功能
Sep 23 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 #Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 #Javascript
koa源码中promise的解读
Nov 13 #Javascript
vue-router传递参数的几种方式实例详解
Nov 13 #Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 #Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 #Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 #Javascript
You might like
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
php获取数据库中数据的实现方法
2017/06/01 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
javascript简单实现命名空间效果
2014/03/06 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
javascript实现Email邮件显示与删除功能
2015/11/21 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
浅谈js中几种实用的跨域方法原理详解
2016/12/02 Javascript
js中document.referrer实现移动端返回上一页
2017/02/22 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
express框架下使用session的方法
2019/07/31 Javascript
Python编程之属性和方法实例详解
2015/05/19 Python
深入理解Python中命名空间的查找规则LEGB
2015/08/06 Python
Python开发中爬虫使用代理proxy抓取网页的方法示例
2017/09/26 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Windows下python3.6.4安装教程
2018/07/31 Python
基于python3的socket聊天编程
2020/02/17 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
灵泰克Java笔试题
2016/01/09 面试题
员工薪酬福利制度
2014/01/17 职场文书
李培根演讲稿
2014/05/22 职场文书
六一儿童节标语
2014/10/08 职场文书
干部作风建设心得体会
2014/10/22 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
实习协议书
2015/01/27 职场文书
任命通知范文
2015/04/21 职场文书