一个 Chrome Manifest V3 截图插件:容器感知的拖拽式滚动截图——专门解决「普通整页截图插件截不动」的页面。
主流整页截图插件只会滚动 window;一旦遇到固定外壳 + 内部滚动的后台页(侧边栏/顶栏固定、表格在内部容器里滚动)就滚不动。scrollshot 识别的是光标下真正的滚动容器。
| 特色 | 说明 |
|---|---|
| 🎯 专治固定布局后台页 | 固定侧边栏/顶栏 + 内容区内部滚动的后台页——正是主流插件会失效的场景 |
| 🧩 兼容自定义滚动条库 | 能识别 PerfectScrollbar / slimScroll / OverlayScrollbars 等 overflow:hidden 容器(后台模板常见) |
| ➡️ 四向边缘自动滚动 | 上/下/左/右拖到边缘都自动滚,选区跨屏增长 |
| 🎚️ 滚动距离手动可控 | 想截多长截多长,不依赖"自动滚到底",无限滚动页面友好 |
| 🧹 截图干净无污染 | 捕获时自动隐藏覆盖层:不偏色、不错位、页头不重复;失败自动重试并明确提示 |
| 💾 大图内存友好 | Blob 直存,避免超大 base64 撑爆内存 |
| 🔒 最小权限、隐私干净 | 仅 activeTab/scripting/storage/downloads/clipboardWrite/offscreen;offscreen 仅用于本地隐藏文档创建和释放 Blob URL,以可靠保存 PNG;无 <all_urls>、无网络请求、无数据收集 |
- 打开 Chrome,访问
chrome://extensions/; - 右上角打开「开发者模式」;
- 点「加载已解压的扩展程序」,选择本扩展所在的目录;
- 点击工具栏图标,或按
Alt+Shift+S,即可开始框选。
设置页:扩展详情 → 「扩展程序选项」,或右键图标 → 选项。
| 操作 | 效果 |
|---|---|
点击图标 / Alt+Shift+S |
进入框选(再按一次退出) |
| 按住左键拖动 | 框选区域,宽高始终以手动拖出的范围为准,左上角实时显示尺寸 |
| 继续拖到上/下/左/右边缘 | 自动滚动(容器或窗口,随光标所在位置自动识别),选区持续增长 |
| 松开左键 | 自动滚动 + 逐屏截图 + 拼合,弹出结果面板 |
Esc |
任意时刻取消 |
结果面板:缩略图 + 尺寸 + 「保存 PNG / 复制 / 关闭」。
(扩展根目录)
├─ manifest.json # MV3 清单(最小权限)
├─ background.js # Service Worker:注入脚本、代理截屏/下载/复制弹窗
├─ content\content.js # 核心引擎:覆盖层、容器检测、边缘自动滚、拼合截图
├─ copy.html / copy.js # 复制中介页:HTTP 页面代写剪贴板的聚焦扩展页
├─ offscreen.html / .js # 隐藏文档:重组 PNG 分块并持有 Blob URL(保存用)
├─ options.html / .js # 设置页
├─ build-icons.ps1 # 图标生成脚本
├─ icons\ # 128/48/16 PNG 图标
├─ docs\design.md # 设计文档(含调研结论与已知限制)
└─ test\ # 引擎测试页(无需装扩展)
test/*.html 通过 window.__CAPTURE_TEST__ 直接引入 content.js,自动跳过真实截屏步骤,
打开即可用鼠标实测「拖拽 + 边缘自动滚动 + 选区增长」交互。页面右上角有实时读数。
- 边缘触发距离:光标离边缘多少 px 开始自动滚动(默认 44)
- 滚动速度:贴边时的滚动速度 px/秒(默认 800)
- 滚动稳定等待:每次滚动后等页面稳定再截图;懒加载/图片多的页面可调大(默认 130ms,含自动超时兜底防卡死)
- 隐藏固定/悬浮元素:截图时对
fixed/sticky且与容器视框重叠的元素临时隐藏,避免长图中页头/悬浮按钮重复(默认开)
截图完成后在结果面板手动选择「保存 PNG / 复制 / 关闭」,不会自动保存或弹窗;面板会显示「正在准备保存…」「浏览器正在保存…」「已保存 ✓ / 保存失败…」等状态。 「复制」在 HTTPS / localhost 等安全上下文直接写剪贴板;普通 HTTP 页面没有
navigator.clipboard, 此时会自动弹出一个瞬间关闭的小窗口(扩展页)代写,按钮照常可用。截图时会自动隐藏覆盖层蒙层与选区框(避免暗色/偏色/行间亮度分界混入成图), 单块捕获失败会自动重试,多次失败会明确提示而不是静默保存残缺图。
activeTab + scripting(点击图标后临时注入)、storage(设置)、downloads(保存)、clipboardWrite(复制)、offscreen(仅在本地隐藏文档中创建和释放 Blob URL,以可靠保存 PNG)。无 <all_urls>、无网络请求、无数据收集。
- 虚拟滚动/懒加载列表:滚到哪才渲染到哪,跨屏拼接可能空白(可调大「滚动稳定等待」缓解,无法根治);
- HTTP 页面复制会闪出一个小窗口:非安全上下文没有
navigator.clipboard,需由扩展页代写(窗口约 0.3 秒自动关闭);安全上下文则直接复制、无窗口; - 内容在页面自己的 Shadow DOM 内部时(
elementsFromPoint不穿透),可能识别不到内部滚动容器; - 超大长图(单边 > 32000px 或选区 > 64,000,000 像素)受 canvas 内存限制,会提示缩小选区;
- 无限滚动列表:由用户手动控制滚动距离(这正是「拖拽式」优于「自动滚到底」之处);
- iframe / 跨域内容:v1 不处理。