av素人天堂_free性亚洲_久久亚洲国产视频_国产网红在线_午夜av在线播放_欧美成人精品福利网站_热99在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频

JavaScript實現(xiàn)網(wǎng)頁截圖導(dǎo)出方案

前言

網(wǎng)頁截圖導(dǎo)出不是一個非常高頻的需求,但時不時的也會遇到。這里總結(jié)一下系統(tǒng)的解決方案,然后從中選擇合適自己的。

截圖導(dǎo)出可以看到是兩個功能,第一步實現(xiàn)截圖,第二步實現(xiàn)導(dǎo)出也就是下載能力。

截圖實現(xiàn)

首先,我們必須明白正常javascript是運行在瀏覽器里的,本身沒有截圖的能力。所以要想實現(xiàn)截圖,必須通過其他迂回方案實現(xiàn),廢話少說,直接上結(jié)論。

前端方案1 canvas

[dh url="https://html2canvas.hertzen.com/" icon="" des="html2canvas官網(wǎng)"]html2canvas[/dh]

[dh url="https://html2canvas.hertzen.com/" icon="" des="中文文檔"]中文文檔[/dh]

實現(xiàn)原理:
html2canvas 是一個 HTML 渲染器,屏幕截圖是基于 DOM,因此生成的圖片并不一定 100% 一致,因為它沒有制作實際的屏幕截圖,而是根據(jù)頁面上可用的信息構(gòu)建屏幕截圖。
文檔介紹的比較清楚,canvas只是去還原dom的展示效果。

根據(jù)實現(xiàn)原理,可以想象,實現(xiàn)成本還是比較高的,需要解析dom和css樣式,而且css樣式不一定能完美映射到canvas,另外還會受限于canvas收到的一些限制,比如跨域資源問題。

前端方案2 svg

[dh url="https://github.com/tsayen/dom-to-image" icon="" des="html2canvas官網(wǎng)"]dom-to-image[/dh]

[dh url="https://github.com/1904labs/dom-to-image-more" icon="" des="Github"]dom-to-image升級版[/dh]

實現(xiàn)原理:

核心要素是SVG 的一個特性,允許在 <foreignObject> 標(biāo)簽中包含任意的 HTML 內(nèi)容。所以為了渲染該dom節(jié)點,需要如下步驟:

  1. 遞歸克隆原始DOM節(jié)點
  2. 計算節(jié)點和每個子節(jié)點的樣式并將其復(fù)制到相應(yīng)的克隆,并且要重新創(chuàng)建偽元素,因為它們當(dāng)然不會以任何方式克隆
  3. 嵌入網(wǎng)頁字體,鏈接所有css樣式到style標(biāo)簽,應(yīng)用到clone節(jié)點
  4. 嵌入圖像
    在 <img> 元素中嵌入圖像 URL
    背景 CSS 屬性中使用的內(nèi)嵌圖像,以類似于字體的方式
  5. 將克隆的節(jié)點序列化為 XML
  6. 將 XML 包裹到 <foreignObject> 標(biāo)簽中,然后包裹到 SVG 中,然后使其成為數(shù)據(jù) URL
  7. 創(chuàng)建一個以 SVG 作為源的 Image 元素,并將其呈現(xiàn)在您也已創(chuàng)建的離屏畫布上,然后從畫布中讀取內(nèi)容

嗯,這就是svg方式實現(xiàn)了,和canvas方式一樣,需要我們處理dom,css和資源,但是后續(xù)的繪制渲染工作交給了瀏覽器,所以減輕了很多工作量和代碼量。

服務(wù)端方案

 

[dh url="https://zhaoqize.github.io/puppeteer-api-zh_CN" icon="" des="官方文檔"]Puppeteer [/dh]

Puppeteer 是一個 Node 庫,它提供了一個高級 API 來通過 DevTools 協(xié)議控制 Chromium 或 Chrome。這里具體就不介紹了,我們只使用它的截圖功能。

這個就是真正的截圖能力了,官網(wǎng)有demo。

考慮到業(yè)務(wù)層的頁面都需要用戶訪問權(quán)限,所以正確的步驟應(yīng)該是:

  1. 啟動一個node服務(wù),利用puppeter實現(xiàn)截圖能力
  2. 客戶端發(fā)起一個請求,攜帶cookie
  3. 第一步啟動的服務(wù)處理此請求,生成圖片,地址返回給客戶端
  4. 客戶端拿到圖片資源,進(jìn)行下載即可

對比

html2canvas

優(yōu)點

簡單頁面截圖效果還可以,兼容性還好

缺點

  • 部分樣式無法支持
  • 復(fù)雜頁面,慘不忍睹。
  • cors可以解決跨域,但是實際應(yīng)用還是問題百出
  • 實現(xiàn)非常復(fù)雜,難以改動

在我們項目幾乎無法使用

dom-to-image

優(yōu)點

  • 實現(xiàn)簡單,可下載后自行改動源碼
  • 還原度良好,尤其chrome支持非常好

缺點

  • safari支持不是很好,不過一些問題可以解決(canvas節(jié)點會導(dǎo)出空白,如果使用繪圖引擎的話,建議轉(zhuǎn)化成svg引擎繪圖)
  • ie,edge 無法使用

基本能支持業(yè)務(wù)需求

后端截圖

優(yōu)點

  • 真實截圖,終極方案,無兼容問題

缺點

  • 實現(xiàn)流程稍微繁瑣
  • 需要考慮 用戶權(quán)限認(rèn)證問題

導(dǎo)出實現(xiàn)

導(dǎo)出也就是下載文件到本地

a標(biāo)簽

原理是通過a標(biāo)簽的download屬性實現(xiàn)下載。

// 基本使用
<a href="/images/xxxxx.jpg" download="filename">

// 腳本觸發(fā)
const download = (filename, url) => {
    let a = document.createElement('a'); 
    a.style = 'display: none'; // 創(chuàng)建一個隱藏的a標(biāo)簽
    a.download = filename;
    a.href = url;
    document.body.appendChild(a);
    a.click(); // 觸發(fā)a標(biāo)簽的click事件
    document.body.removeChild(a);
}

blob文件流對象

這個需要服務(wù)端支持,發(fā)起請求,服務(wù)端返回數(shù)據(jù)流,然后前端觸發(fā)下載。
具體就不多說了,網(wǎng)上有很多文章。

這里推薦幾個封裝好的下載文件庫
downloadjs

file-saver
上一篇 flex布局下,div設(shè)置overflow無效問題
下一篇 CorePress主題模仿Mac樣式
目錄
applek

applek管理員

個人說明在個人中心里面設(shè)置

本月創(chuàng)作熱力圖

最新評論
chinacnd
chinacnd
6月26日
這個主題是怎么做到加載速度那么快的?
風(fēng)起云涌
風(fēng)起云涌
6月17日
前臺投稿現(xiàn)在有點太抽象了 希望可以弄成那種分區(qū)填寫的 標(biāo)題,內(nèi)容,圖片,目錄,標(biāo)簽,這樣的
評論于留言建議
風(fēng)起云涌
風(fēng)起云涌
6月17日
希望加個開關(guān)去掉頁腳的站點身份,還有自定義頁腳居中文字
評論于留言建議
卡卡
卡卡
5月31日
倒是放個演示地址啊
av素人天堂_free性亚洲_久久亚洲国产视频_国产网红在线_午夜av在线播放_欧美成人精品福利网站_热99在线观看_国产在线观看免费麻豆_日本高清在线观看_亚洲免费网站观看视频
欧美日韩第一区日日骚| 欧美日韩色综合| 国产 欧美 日韩 在线| 亚洲 国产 欧美 日韩| 91精品观看| 91精品国产色综合久久不卡蜜臀| 亚洲理论中文字幕| 中文字幕不卡三区| 日韩久久精品网| 国产成人精品三级| 国产成人精品综合久久久| 久久精品久久久久| 国产欧美中文在线| 亚洲一级影院| 国自产拍在线网站网址视频| 日韩中文字幕在线视频观看| 国产在线www| 中文在线视频| 日韩中文字幕视频在线观看| 国产欧美久久久精品影院| 精品1区2区3区| 亚洲一级二级| 欧美.日韩.国产.一区.二区| 亚洲免费精品| 精品久久91| 国产日韩中文字幕在线| 国产成人精品网址| 中文字幕在线视频精品| 国产中文在线视频| 欧美成人精品在线| 欧美日韩视频网站| 日韩不卡在线播放| 欧美三级视频在线| 国产一卡二卡3卡4卡四卡在线| 日韩视频中文| www.久久草| 欧美日韩在线三级| 日韩高清不卡| 精品一二三四| 999精品视频在线观看播放| 不卡专区在线| 久久久99久久| 欧美日韩不卡在线视频| 中文字幕在线看视频国产欧美| 国产婷婷一区二区| 国产婷婷色一区二区三区在线| 国产一级片播放| 午夜国产福利一区二区| 在线一区二区不卡| 欧美大片在线观看一区| 一级片免费在线| 91麻豆免费视频网站| 自拍日韩亚洲一区在线| 欧美日韩精品欧美日韩精品| 亚洲欧美中文字幕在线观看| 欧美日韩高清在线播放| 国产成人精品网址| 国产日韩1区| 国产一级一片免费播放| wwwww亚洲| 精品999在线| 伊人中文字幕在线观看| 欧美成人精品在线| 日韩 国产 一区| 日韩国产欧美在线视频| 日韩在线高清视频| 中文字幕国产日韩| 午夜一区二区视频| 国产丝袜在线播放| 中文字幕中文字幕精品| 不卡福利视频| 在线综合 亚洲 欧美中文字幕| 国产婷婷色一区二区三区在线| 亚洲欧美中文字幕在线观看| 日韩在线一区二区视频| 一区二区在线看| 精品不卡一区二区| 日韩三级视频在线播放| 一区二区三区在线不卡| 日韩精品免费视频一区二区三区| a级在线免费观看| 日韩欧美色综合网站| 国产黄色一级片| 日韩欧美一级在线| 91精品国产综合久久久久久| 蜜桃视频一日韩欧美专区| 亚洲开心激情| 老司机久久99久久精品播放免费| 国产欧美日韩中文| 天天综合天天添夜夜添狠狠添| 一级日本免费的| 日韩欧美三级| 日韩视频在线观看一区| 日韩视频精品在线| 亚洲日本精品视频| 亚洲三级欧美| 91国内精品在线视频| 丰满少妇一区二区| 韩国av一区二区| 久久久精品日韩欧美| 中文字幕成人乱码在线电影| 日韩视频第二页| 国产黄色在线免费观看| 国产一二三四| 国产真实乱子伦精品视频| 精品999视频| 国产v日产∨综合v精品视频| 国产区高清在线| 玖玖在线免费视频| 亚洲 欧美综合在线网络| 欧美 日韩 中文字幕| 精品国内自产拍在线视频| 欧美日韩激情在线一区二区三区| 日韩在线视频一区二区三区| 91精品国产91久久久久久青草| 91麻豆精品国产91久久久使用方法| 国产免费一级| 91九色在线播放| 国产高潮久久久| 一区二区三区精品在线观看| 一区二区日韩av| 亚洲制服一区| 欧美日韩国产免费观看视频| 欧美日韩亚洲国内综合网| 国产aa精品| 一区二区三区中文字幕在线观看| 日本精品专区| 日韩在线中文| 中文字幕在线看视频国产欧美| 综合激情国产一区| 国产偷久久久精品专区| 午夜精品一区二区三区免费视频| 欧美日韩精品不卡| 粉嫩粉嫩芽的虎白女18在线视频| 欧美婷婷精品激情| 亚洲欧洲综合另类| 国产欧美久久久精品影院| 亚洲 国产 欧美 日韩| 亚洲精品中文字幕乱码三区| 国产成人日日夜夜| 欧美激情一区二区三区在线| 99综合视频| 欧美日韩国产页| 日韩欧美三级在线| 国产h片在线观看| 国产资源在线观看| 欧美日韩性视频在线| 欧美亚洲专区| 国产性一级片| 亚洲中文字幕一区| 亚洲乱码中文字幕综合| 91精品在线观看视频| 刘玥91精选国产在线观看| 精品在线观看一区| 亚洲一区在线观看免费| 欧美国产日韩综合| 亚洲高清不卡一区| av一区在线观看| 91精品国产色综合久久不卡蜜臀| 91精品国产91久久久久久久久| 国产乱国产乱老熟300| 国产欧美日韩不卡免费| 亚洲一区中文字幕在线观看| 日韩精品中文字幕第1页| 日本精品专区| 日韩精品视频在线免费观看| 中文字幕一区免费| 国产天堂素人系列在线视频| 国产www在线观看| 亚洲免费婷婷| 欧美日韩中文| 久久精品黄色片| 久久99精品久久久久久青青日本| 欧美,日韩,国产在线| 欧美日韩成人综合| 在线亚洲人成| 日韩中文欧美在线| 国产v日产∨综合v精品视频| 国产999精品在线观看| 亚洲第一精品在线| 国产亚洲污的网站| 欧美日韩在线视频首页| 不卡视频一区二区三区| 国产福利一区二区精品秒拍| 日韩欧美中文字幕在线视频| 欧美日韩在线播放三区四区| 久久精品久久精品国产大片| 欧美一级欧美三级在线观看| 亚洲综合在线视频| 精品一性一色一乱农村| 国产999在线观看| 国产欧美日韩精品在线观看| 日韩在线视频网| 欧美亚洲国产日韩| 日韩亚洲国产欧美| а√天堂中文在线资源8| 欧美三级精品| 中文字幕第一页在线| 日韩中文字幕视频网| 99久久精品国产成人一区二区| 在线国产日本| 欧美变态tickling挠脚心| 亚洲欧美日本另类| 欧美高清视频一区二区三区| 本道综合精品| 国产高清精品在线| 黄色国产网站在线播放| 日本一级一片免费视频| 91精品视频免费在线观看| 在线手机中文字幕| 精品欧美不卡一区二区在线观看| 中文字幕在线观看国产| 国产一级免费看| 欧美日韩国产首页| 日韩一级免费在线观看| 欧美一级免费观看| 在线观看中文字幕一区| 久久久99久久精品欧美| 在线观看一区| 国产主播中文字幕| 一级一片免费视频| av中文天堂在线| 精人妻一区二区三区| 日韩在线精品| 日韩三级视频在线播放| 欧美日韩精品在线播放| 国内精品99| 青青久在线视频免费观看| 国产欧美高清在线| 中文字幕久久av| 国产小视频免费在线观看| 99在线精品视频免费观看20| 精品乱人伦一区二区三区| 麻豆一区二区99久久久久| 日韩欧美99| 中文字幕欧美人妻精品一区蜜臀| 免费在线视频一级不卡| 国产欧美日韩中文字幕在线| 亚洲午夜av| 免费在线视频一区二区| 亚洲一卡二卡在线观看| 欧美日韩国产不卡在线看| 精品不卡一区二区| 欧美国产小视频| 亚洲欧美99| www.久久草| 国产真实乱子伦精品视频| 亚洲高清在线观看一区| 日韩精品一区二区三区视频播放| 欧美日韩国产第一页| 精品乱人伦一区二区三区| 亚洲免费在线视频一区 二区| 91亚洲欧美| 91精品国产91久久久久青草| 国产一区日韩| 欧美日韩国产观看视频| 久久久精品日韩| 香蕉人人精品| 91久久精品视频| 国产欧美第一页| 精品国内自产拍在线视频| 日韩色在线观看| 久久精品国产91精品亚洲| 99久久www免费| 欧美日韩中文字幕| 亚洲国内精品视频| 中文 欧美 日韩| 欧美日韩在线视频首页| 欧美成人精品在线| 国产一区在线不卡| 久久99精品久久久久久青青日本| 亚洲黄色片在线观看| 欧美成人一区二区| 日韩欧美国产黄色| 欧美午夜影院在线视频| 三级精品视频| 日韩精品中文字幕第1页| 你懂的亚洲视频| 日韩视频不卡中文| 日韩中文字幕第一页| 日韩在线视频一区二区三区| 亚洲欧洲一区二区天堂久久| 午夜影院在线观看欧美| 日韩免费视频一区| 日韩不卡中文字幕| 国产婷婷色一区二区三区| 精品国产乱码一区二区| 欧美在线亚洲一区| 在线国产三级| 国产在线不卡一区| a√免费观看在线网址www| 中文字幕不卡三区| 中文字幕欧美日韩va免费视频| 91精品国产综合久久福利| 欧美日韩一二| 国产免费一级片| 日韩午夜黄色| 国产999精品在线观看| 内射国产内射夫妻免费频道| 日韩视频专区| 成人无遮挡免费网站视频在线观看| 日韩.欧美.亚洲| 亚洲一区二区三区精品中文字幕| 国产欧美日韩中文| 久久精品免费看| 精品日韩在线播放| 在线免费播放av| 国产视频一区二| 91精品国产综合久久福利| 成人h视频在线观看| 精品中文字幕在线| 久久中文精品| 99视频精品全国免费| 阿v免费在线观看| 欧美在线视频二区| 国产一级片在线播放| 亚洲一级二级| 亚洲一区日韩精品中文字幕| 精品国产1区二区| 久久91精品久久久久久秒播| 免费高清视频日韩| 国产成人精品999在线观看| 一级片免费在线播放| 伊人伊成久久人综合网小说| 国产导航在线| av免费在线网站| av手机天堂| 亚洲乱码中文字幕综合| 日韩在线视频免费观看| 国产欧美日韩中文| 亚洲综合日韩欧美| 日韩一级中文字幕| 中文字幕在线观看欧美| 一区二区视频在线| 国产丝袜在线播放| 亚洲视频电影在线| 国产亚洲一区字幕| 激情久久99| 免费在线亚洲| 欧美日韩亚洲系列| 亚洲一区在线视频观看| 天堂在线中文| 亚洲人成欧美中文字幕| 精品久久久久久综合日本欧美| 日韩欧美国产网站| 国产黄色片中文字幕| 欧美,日韩,国产在线| 影音先锋一区二区资源站| 伊人网站在线| 欧美亚洲视频在线看网址| 国产激情在线观看| 欧美高清视频一区二区三区| 99久久精品国产成人一区二区| 精品久久久久久无| 精品亚洲成a人片在线观看| 亚洲欧洲精品在线| 亚洲最新永久观看在线| 日韩精品在线播放| 欧美国产一级片| 日韩视频国产视频| 日韩欧美中文视频| 国产成人一二三区| 欧美中文字幕视频| 国产日韩成人精品| 深夜福利一区| 日韩欧美国产成人一区二区| 国产欧美日韩精品综合| 国产午夜精品全部视频播放| 欧美日韩国产在线观看| 精品对白一区国产伦| 日韩色在线观看| 日韩精品一页| 免费中文字幕日韩欧美| 日韩亚洲一区在线| 精品国产欧美日韩不卡在线观看| 久久久精品欧美| 国产在线观看91| 亚洲免费精品视频| 一本一道久久a久久精品综合蜜臀| 国产www在线观看| 日韩视频一区在线观看| 日韩精品资源二区在线| 日本不卡视频一区| 精品日韩视频在线观看| 欧美激情一区二区三区在线| 一区免费在线| 欧美日韩激情在线一区二区三区| 欧美日韩视频免费播放| 国产一级网站视频在线| 日韩欧美在线影院| 亚洲第一精品在线| 日韩精品在线免费播放| 中文字幕在线高清| 亚洲免费视频一区| av不卡免费看| 中文av字幕一区| 欧美日韩在线播放视频| 国产黄色在线看| 日韩午夜黄色| 日韩精品在线中文字幕|