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 相关文章推荐
JQuery实现自定义对话框的代码
Jun 15 Javascript
一些技巧性实用js代码小结
Oct 14 Javascript
jQuery实现的类flash菜单效果代码
May 17 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
实例分析js和C#中使用正则表达式匹配a标签
Nov 26 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
Sep 15 Javascript
用js控件div的滚动条,让它在内容更新时自动滚到底部的实现方法
Oct 27 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
Nov 11 Javascript
js,jq,css多方面实现简易下拉菜单功能
May 13 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
vue2.0模拟锚点的实例
Mar 14 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 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
Apache2 httpd.conf 中文版
2006/11/17 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
js中for in的用法示例解析
2013/12/25 Javascript
javascript操作css属性
2013/12/30 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
2014/06/01 Javascript
轻松创建nodejs服务器(4):路由
2014/12/18 NodeJs
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JavaScript 弹出子窗体并返回结果到父窗体的实现代码
2016/05/28 Javascript
JS脚本实现动态给标签控件添加事件的方法
2016/06/02 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
完美解决axios跨域请求出错的问题
2018/02/05 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
2018/08/24 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
js滚轮事件 js自定义滚动条的实现
2020/01/18 Javascript
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python之re操作方法(详解)
2017/06/14 Python
Python简单定义与使用字典dict的方法示例
2017/07/25 Python
tensorflow的计算图总结
2020/01/12 Python
浅谈Python的方法解析顺序(MRO)
2020/03/05 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
基于Python中random.sample()的替代方案
2020/05/23 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
思想专业自荐信范文
2013/12/25 职场文书
文员求职信
2014/07/15 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
昆虫记读书笔记
2015/06/26 职场文书
Golang生成Excel文档的方法步骤
2021/06/09 Golang
nginx七层负载均衡配置详解
2022/07/15 Servers