当前位置: 首页 > news >正文

前端实现页面截图及截图内容包含跨域图片时的处理

项目中遇到需要实现指定位置的截图,采取使用依赖 html2canvas 实现。
参考:https://html2canvas.hertzen.com/

一、实现步骤:

1、下载依赖或者使用官方js文件链接,本文使用的js链接;
2、代码
style

.screen-box {padding: 20px;background-color: #f5f5f5;
}

html

<div id="screen-box" class="screen-box"><h1>这是一个需要截图的区域</h1>
</div>
<button onclick="screenShot()">点击截图</button>

script

<script src="https://html2canvas.hertzen.com/dist/html2canvas.min.js"></srcipt>
<script>
function screenShot() {const element = document.getElementById('screen-box');html2canvas(element).then(canvas => {const img = canvas.toDataURL('image/png');downloadImage(img);})
}function downloadImage(imgUrl, fileName = 'image.png') {// 1. 创建a标签const link = document.createElement('a');// 2. 设置下载属性(指定文件名)link.download = fileName;// 3. 设置图片地址为a标签的hreflink.href = imgUrl;// 4. 隐藏a标签(可选,避免页面渲染)// link.style.display = 'none';// 5. 将a标签添加到DOM中(部分浏览器需要)document.body.appendChild(link);// 6. 触发点击事件下载link.click();// 7. 下载后移除a标签(清理DOM)document.body.removeChild(link);
}

二、易错:

1、当 html 中包含有同源图片时,此代码可下载的图片文件中包含html的图片;
2、当 html 中包含跨域图片时,此代码下载的图片文件会中不会显示html包含的文件。
例如,当需截图的代码片段中含有由第三方引入的图片地址:
html:

<div id="screen-box" class="screen-box"><h1>这是一个需要截图的区域</h1><img src="https://gips3.baidu.com/it/u=1821127123,1149655687&fm=3028&app=3028&f=JPEG&fmt=auto?w=720&h=1280"height="300px" title="截图区图片" alt="图片" />
</div>
<button onclick="screenShot()">点击截图</button>

截图:

原因:

这是由于 canvas 受限于 CORS 策略, 会存在跨域问题, 虽然可以使用图像, 但是绘制到画布上会污染画布, 一旦一个画布被污染, 就无法提取画布的数据。比如无法使用画布 toBlod() , toDataURL() 或者 getImageData() 方法。

解决办法:

增加代码:

// 将文件读入到 blob 文件对象, 然后使用 URL.createObjectURL 转换成 src 可用的地址
async function toBlob() {const domUrl = document.getElementsByTagName('img')[0];const response = await fetch(domUrl.src, { mode: 'cors' });if (!response.ok) throw new Error('图片请求失败');const blob = await response.blob();const blobUrl = URL.createObjectURL(blob);domUrl.setAttribute('src', blobUrl);
}

修改 screenShot 函数:

async function screenShot() {await toBlob();...
}

修改代码后,截图如下:

以上。

http://www.zskr.cn/news/77869.html

相关文章:

  • 2025年苗木批发基地供应商口碑榜:前十强深度解析,丝棉木/金森女贞/青叶复叶槭/红叶李/国槐/白蜡/无刺枸骨球苗木批发基地供应商排行榜单
  • 2025 最新免费降 AI 率网站测评!13 款中英文工具实测,哪个最好用?
  • 软件构造大作业:儿童故事管理平台的开发
  • 屏幕上那一行刺眼的红色 `Time Limit Exceeded`,是不是你我再熟悉不过的场景?
  • 西电2025硕士网课——人工智能安全与伦理练习答案
  • 2026上海办公室装修实力强的公司推荐三家:资质与案例双标杆指南
  • 枚举
  • 认识设计模式——单例模式 - 指南
  • 应用文档抽取技术,赋予RPA理解和处理复杂现实世界信息的能力
  • 深入解析:在百度seo快速收录要求是什么 有哪些
  • 腾讯新闻APP的消息推送Push架构技术重构实践
  • Hello World
  • 外包干了一个月,科技明显进步。。。。。
  • 拉格朗日乘子和 KTT 条件的关系
  • 感受物理公式的气功
  • 原生js实现文字行垂直向上滚动无限循环
  • 2025年12月内蒙古钢结构施工、钢结构厂房、钢结构煤棚、钢结构网架、钢结构工程厂家综合推荐与选择指南
  • 详细介绍:线性代数 - 齐次线性方程组的样子
  • 【安全研发】Nuclei源码分析-模板引擎实现(五)
  • 2025年上海本地装修公司口碑排名,家悦可可装饰业主真实反馈整理
  • 2025年12月江苏徐州皮带秤、给煤机、称重给料机、皮带采样机、汽车采样机厂家综合推荐TOP10榜单
  • 毛孔隐形日常routine:科学疏通与细滑,告别“草莓鼻”与油光脸
  • 2025年12月江苏徐州金属熔剂、金属添加剂、铝基中间合金厂家综合推荐指南
  • 2025年GEO生成引擎优化服务商哪家好?权威推荐与选型指南
  • 2025年下半年上海ISO三体系认证公司权威评测与选择指南
  • 2025年12月钢板仓源头厂家推荐: 粉煤灰钢板仓,螺旋卷板仓,焊接钢板仓厂家以技术创新赋能物料存储升级
  • 2025年市面上有实力的尘埃粒子计数器供应商哪家权威,空气粒子计数器/激光尘埃粒子计数器/大流量尘埃粒子计数器供应厂家排名
  • 大屏可视化演示
  • 【python自动化测试】uiautomator2中watcher的使用问题
  • 01 安装与运行