Skip to content

About

一个 Chrome Manifest V3 截图插件:容器感知的拖拽式滚动截图——专门解决「普通整页截图插件截不动」的页面

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

滚动截图 · 拖拽即滚(scrollshot)

一个 Chrome Manifest V3 截图插件:容器感知的拖拽式滚动截图——专门解决「普通整页截图插件截不动」的页面。

主流整页截图插件只会滚动 window;一旦遇到固定外壳 + 内部滚动的后台页(侧边栏/顶栏固定、表格在内部容器里滚动)就滚不动。scrollshot 识别的是光标下真正的滚动容器。

核心特色

特色 说明
🎯 专治固定布局后台页 固定侧边栏/顶栏 + 内容区内部滚动的后台页——正是主流插件会失效的场景
🧩 兼容自定义滚动条库 能识别 PerfectScrollbar / slimScroll / OverlayScrollbars 等 overflow:hidden 容器(后台模板常见)
➡️ 四向边缘自动滚动 上/下/左/右拖到边缘都自动滚,选区跨屏增长
🎚️ 滚动距离手动可控 想截多长截多长,不依赖"自动滚到底",无限滚动页面友好
🧹 截图干净无污染 捕获时自动隐藏覆盖层:不偏色、不错位、页头不重复;失败自动重试并明确提示
💾 大图内存友好 Blob 直存,避免超大 base64 撑爆内存
🔒 最小权限、隐私干净 仅 activeTab/scripting/storage/downloads/clipboardWrite/offscreen;offscreen 仅用于本地隐藏文档创建和释放 Blob URL,以可靠保存 PNG;无 <all_urls>、无网络请求、无数据收集

安装(开发者模式)

  1. 打开 Chrome,访问 chrome://extensions/;
  2. 右上角打开「开发者模式」;
  3. 点「加载已解压的扩展程序」,选择本扩展所在的目录;
  4. 点击工具栏图标,或按 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 不处理。

About

一个 Chrome Manifest V3 截图插件:容器感知的拖拽式滚动截图——专门解决「普通整页截图插件截不动」的页面

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages