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

浏览器截屏攻略,深入浅出 Screen Capture API

点赞 + 关注 + 收藏 = 学会了

在 Web 开发中,实现“屏幕分享”或“页面截图”曾是一件遥不可及的事情。但随着 Screen Capture API 的成熟,开发者现在只需寥寥数行原生 JavaScript 代码,就能在浏览器中直接捕获用户屏幕内容。

Screen Capture API 是 W3C 标准的一部分,它引入了 getDisplayMedia() 方法。这套 API 的核心功能是允许网页录制用户的屏幕(包括整个桌面、特定的应用程序窗口或当前的浏览器标签页)。

它的核心原理是将屏幕内容转化为一个 MediaStream(媒体流)。你可以将这个流展示在 <video> 标签里,或者利用 <canvas> 抽离出静态的图片。

用法

要实现“截图”功能,本质上是一个“截取视频帧”的过程。

核心逻辑流程

  1. 激活权限:调用 getDisplayMedia 弹出系统授权弹窗。
  2. 承载画面:创建一个隐藏的视频容器,将实时屏幕流接入。
  3. 瞬间定格:利用 Canvas 的 drawImage 方法,捕捉视频当前时刻的画面。
  4. 资源回收:截图完成后,必须手动停止录制轨道,否则浏览器上方会一直显示“正在共享”。

我用 Vue3 代码演示一下。

<template><div><div class="capture-area" style="padding: 20px;"><h2 class="no-screenshot">这是2级标题</h2><img src="https://iili.io/fcR7gSe.md.png" alt="" style="width: 140px;"><p style="font-size: 16px; margin: 0;">雷猴世界~</p></div><!-- 截图按钮 --><button @click="captureScreen">点击截图</button></div>
</template><script setup>async function captureScreen() {try {// 第一步:获取屏幕流(必须由用户点击触发)const stream = await navigator.mediaDevices.getDisplayMedia({video: { cursor: "always" }, audio: false });// 第二步:通过 Video 元素渲染流const video = document.createElement("video");video.srcObject = stream;video.onloadedmetadata = () => {video.play();// 第三步:将视频帧绘制到 Canvas 上const canvas = document.createElement("canvas");canvas.width = video.videoWidth;canvas.height = video.videoHeight;const ctx = canvas.getContext("2d");// 稍作延迟确保画面已渲染setTimeout(() => {ctx.drawImage(video, 0, 0, canvas.width, canvas.height);// 第四步:导出并下载图片const image = canvas.toDataURL("image/png");downloadImage(image);// 第五步:释放摄像头/屏幕资源(极其重要!)stream.getTracks().forEach(track => track.stop());}, 500);};} catch (err) {console.error("用户拒绝了授权或发生错误:", err);}
}function downloadImage(dataUrl) {const link = document.createElement("a");link.href = dataUrl;link.download = `screenshot_${new Date().getTime()}.png`;link.click();
}</script><style scoped>
.capture-area {width: 400px;box-sizing: border-box;border: 1px solid red;border-radius: 20px;
}
</style>

点击页面上的“点击截图”按钮,首次会让你授权浏览器截图,需要在系统设置里授权。

授权后回到浏览器重新截图就可以选择要截图的标签页、窗口,或者是整个屏幕。

注意事项

在实际应用中,Screen Capture API 有几条硬性红线:

约束项 说明
HTTPS 协议 除了 localhost,必须在安全环境下运行,否则 getDisplayMedia 不存在。
用户交互限制 代码不能在页面加载时自动运行,必须由 click 等用户主动事件触发。
隐私保护 浏览器无法截取受系统保护的窗口(如密码管理器、某些加密视频软件)。
资源泄露 如果不调用 track.stop(),电脑的任务栏会一直显示录制图标,非常消耗性能。

Screen Capture VS 第三方库

之前介绍过 html2canvas 和 dom-to-image-more 这两个库,它们和 Screen Capture API 的应用场景完全不同。

  • Screen Capture API:捕捉的是真实屏幕。它可以抓到浏览器之外的东西(如你的桌面、其他软件),适合做录屏工具、视频会议。
  • html2canvas 和 dom-to-image-more:捕捉的是 DOM 结构。它通过读取 HTML/CSS 重新绘制出一个 Canvas。它不需要用户授权,但它无法捕捉浏览器之外的内容。

Screen Capture API 的出现让 Web 应用拥有了原生级的交互能力。无论是做远程协作工具,还是网页端的 Bug 反馈系统,它都是一把利器。


点赞 + 关注 + 收藏 = 学会了

http://www.jsqmd.com/news/501236/

相关文章:

  • 3个革命性步骤解决Steam创意工坊跨平台下载难题
  • WPF ScrollViewer滚动条不显示?5分钟搞定高度属性配置(含代码示例)
  • 网型逆变器小干扰稳定性分析与控制策略优化Simulink仿真模型与代码解析
  • 2024-2026年留香沐浴露品牌推荐:敏感肌友好亲肤留香热门款式与真实评价对比 - 品牌推荐
  • PasteMD应用场景解析:程序员/产品经理/学生都能用的整理神器
  • ollama-QwQ-32B中文优化实践:提升OpenClaw任务指令理解准确率
  • Cesium - 深入解析Quantized-mesh地形瓦片的编码与解码机制
  • 留香沐浴露怎么选香味持久?2026年十大品牌推荐解决香味短暂不持久困扰 - 品牌推荐
  • 亚马逊广告API授权避坑指南:手把手解决OAuth2.0常见报错(附邮件模板)
  • 从靶场到实战:Linux应急响应核心技能演练
  • 深度学习模型部署实战:如何将训练好的模型应用到生产环境?
  • STM32F103C8T6变身ST-Link:零成本打造你的单片机下载工具
  • 2025-2026年留香沐浴露品牌推荐:每日沐浴舒缓疲劳口碑香型及用户反馈汇总 - 品牌推荐
  • DeepSeek-OCR-2实战:基于LangChain的文档问答系统
  • Simulink Stateflow入门:5分钟掌握状态动作与转移动作的核心语法
  • SPIRAN ART SUMMONER快速上手:在“晶球盘”上调节,轻松掌控Flux.1-Dev画质
  • 深入解析ALV字段目录LVC_S_FCAT:从基础配置到高级应用
  • 调参指南:如何用sklearn的RandomForest提升模型准确率到96%?
  • 零基础部署Clawdbot+Qwen3:32B:代理直连配置手把手教学
  • EfficientNet-B0架构深度剖析 -- 从参数配置到特征提取层设计
  • 数电实战解析:优先编码器74HC148的设计与应用
  • Qwen2.5-7B-Instruct与LaTeX结合:智能学术写作助手
  • 图像处理进阶:Suzuki轮廓跟踪算法在OpenCV中的优化与应用案例
  • 让AI帮你读图:Qwen3-VL-2B在生活工作中的10个实用案例
  • 从边界到洞察:全国自然保护区矢量数据的GIS实战应用
  • MQ-5气体传感器在GD32F407上的嵌入式驱动实现
  • E800变频器PROFINET与CC-Link IE Basic双网配置实战(三菱FX5U平台)
  • 三步搞定Steam创意工坊下载:无需客户端跨平台终极方案
  • CTF实战:从内存与磁盘取证到自动化工具链构建
  • Step3-VL-10B多场景落地:跨境电商主图审核→文字合规检测→多语言适配建议