JS中使用cavas截圖網(wǎng)頁并解決跨域及模糊問題
前幾天給了個(gè)需求對(duì)瀏覽器網(wǎng)頁進(jìn)行截圖,把網(wǎng)頁統(tǒng)計(jì)數(shù)據(jù)圖形表等截圖保存至用戶本地。
首先對(duì)于網(wǎng)頁截圖,我用的是canvas實(shí)現(xiàn),獲取你需要截圖的模塊的div,從而使用canvas對(duì)你需要的模塊進(jìn)行截圖。
我們先來引入canvas的js文件,js文件獲取地址官網(wǎng)主頁: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用來取到值 要寫個(gè)空 down load是下載圖片出來的名稱
jsp代碼
function test() { var canvas2 = document.createElement("canvas"); //創(chuàng)建一個(gè)新的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倍或者更多,然后盛放在較小的容器內(nèi),就顯得不模糊了 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設(shè)置為你的點(diǎn)擊鍵 }); window.onload = test;
截圖出來后,由于我的網(wǎng)址上有百度地圖的api,地圖圖片等等一些東西,用canvas網(wǎng)頁進(jìn)行截圖是就會(huì)發(fā)現(xiàn)所有圖片的地方都是空白。這就是因?yàn)榭缬颉?/p>
來講一下跨域問題,我舉個(gè)例子說明這個(gè)跨域,比如我的網(wǎng)頁里面有的圖片不是來自于自己的服務(wù)器。那么,這張圖片就和這個(gè)網(wǎng)頁不是同域,那么html2canvas就無法對(duì)這種圖片進(jìn)行截圖,如果你的網(wǎng)站的所有圖片都放在單獨(dú)的圖片服務(wù)器上,那么用html2canvas對(duì)整個(gè)網(wǎng)頁進(jìn)行截圖是就會(huì)發(fā)現(xiàn)所有圖片的地方都是空白。
跨域問題網(wǎng)上好多大佬說用代理服務(wù)器來解決,但是感覺太麻煩,后來我使用了小段代碼就OK了。
taintTest : false, useCORS : true, allowTaint :false, //注:useCORS:true和allowTaint:true 這兩個(gè)都是來解決跨域問題的,但是并不可以一起使用,如果同時(shí)使用會(huì)出現(xiàn)錯(cuò)誤。
對(duì)于截圖模糊就調(diào)整canvas畫布大小比如我上面寫的*2,畫布調(diào)大,容器小,截圖自然就清楚了
截圖成功呈現(xiàn)
總結(jié)
以上所述是小編給大家介紹的JS中使用cavas截取網(wǎng)頁并解決跨區(qū)及模糊問題,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
JavaScript1.6數(shù)組新特性介紹以及JQuery的幾個(gè)工具方法
這篇文章主要是對(duì)JavaScript1.6數(shù)組新特性以及JQuery的幾個(gè)工具方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12js實(shí)現(xiàn)可折疊展開的手風(fēng)琴菜單效果
這篇文章主要介紹了js實(shí)現(xiàn)可折疊展開的手風(fēng)琴菜單效果,通過簡(jiǎn)單的樣式變換控制菜單項(xiàng)的展開與折疊功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-09-09js中小數(shù)向上取整數(shù),向下取整數(shù),四舍五入取整數(shù)的實(shí)現(xiàn)(必看篇)
下面小編就為大家?guī)硪黄猨s中小數(shù)向上取整數(shù),向下取整數(shù),四舍五入取整數(shù)的實(shí)現(xiàn)(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02在ASP.NET MVC項(xiàng)目中使用RequireJS庫的用法示例
這篇文章主要介紹了在ASP.NET MVC項(xiàng)目中使用RequireJS的用法示例,文中主要講解了網(wǎng)站項(xiàng)目的一些基本目錄結(jié)構(gòu)思想,并給出了一個(gè)半自動(dòng)壓縮的例子,的朋友可以參考下2016-02-02如何在CocosCreator里畫個(gè)炫酷的雷達(dá)圖
這篇文章主要介紹了如何在CocosCreator里畫個(gè)炫酷的雷達(dá)圖,對(duì)Graphics感興趣的同學(xué),一定要看看,并且把代碼實(shí)踐一下2021-04-04PHP配置文件php.ini中打開錯(cuò)誤報(bào)告的設(shè)置方法
這篇文章主要介紹了PHP配置文件php.ini中打開錯(cuò)誤報(bào)告的設(shè)置方法,需要的朋友可以參考下2015-01-01