返回资讯中心
外部精选
软件工程
#开发者实时流

Vimium2 发布:让 Vimium 快捷键也能在 PDF 阅读器等扩展内使用

来源标题:Vimium2: Vimium fork that also works inside extensions like PDF readers

Vimium2 是 Vimium 的分支版本,解决了 Vimium 快捷键无法在其他 Chrome 扩展(如 PDF 阅读器)内使用的问题。由于 Chrome 扩展之间相互隔离,Vimium 无法自动向其他扩展注入代码,Vimium2 改为让用户手动一次性注入代码,通过跨扩展消息与自身的 service worker 通信。在普通网站上,Vimium2 的用法与 Vimium 相同。

Hacker News 最新jaywonchung2026/11/8 · 6 天前10 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

Vimium,但也能在其他 Chrome 扩展内部使用。

Vimium 的快捷键在其他扩展(例如 PDF 阅读器)内部不起作用。

Vimium2 是 Vimium 的一个分支,能让它在这些扩展里也正常工作。

flowchart TB subgraph Website["Website"] WC["Injected code"]:::vimium end subgraph Vimium["Vimium extension"] BG["Service worker and settings"]:::vimium UI["Vomnibar, help, and status panel"]:::vimium UI <--> BG end WC <--> BG WC <--> UI classDef vimium fill:#dbeafe,stroke:#2563eb,color:#172554 Loading

Vimium 会向网页注入代码,由这些代码监听键盘事件。

尤其是对于切换或关闭标签页、填充 Vomnibar 结果这类浏览器命令,注入的代码需要与 Vimium 的 service worker(后台守护进程)通信。

然而,Chrome 扩展之间彼此隔离,因此 Vimium 无法自动向其他扩展注入代码。

对于普通网站,Vimium2 的工作方式与 Vimium 相同。

对于其他扩展,你需要一次性手动注入 Vimium2 的注入代码,之后这段代码会通过跨扩展消息传递与 Vimium2 的 service worker 通信。

蓝色组件来自 Vimium,并在需要的地方做了改动。

绿色组件由 Vimium2 添加。

flowchart TB subgraph Website["Website"] WC["Injected code"]:::vimium LB["Local backend"]:::vimium2 WC <--> LB end subgraph Target["Patched extension page"] EC["Injected code"]:::vimium RB["Remote backend"]:::vimium2 EC <--> RB end subgraph Vimium2["Vimium2 extension"] BP["Bridge"]:::vimium2 BG["Service worker and settings"]:::vimium UI["Vomnibar, help, and status panel"]:::vimium BP <--> BG UI <--> BG end LB <--> BG RB <--> BP WC <--> UI EC <--> UI classDef vimium fill:#dbeafe,stroke:#2563eb,color:#172554 classDef vimium2 fill:#dcfce7,stroke:#16a34a,color:#14532d Loading

使用 Vimium2

注意

如果你是因为看到错误信息「Vimium2: This extension was patched for a different Vimium2 build.」而来到这里的,那很可能意味着你的 Vimium2 和已打补丁的扩展版本不同步了。重新构建 Vimium2、重新给相关扩展打补丁并重新加载,应该就能解决。

Vimium2 的架构理论上适用于大多数扩展。

官方支持的扩展见 integrations/。

你需要 Deno 2 和 Chrome(我还没有在其他基于 Chromium 的浏览器上测试过)。

deno task patch [integration subdir] 会给目标扩展打补丁,并在 dist/ 下创建一个包含已打补丁扩展的新目录。

例如,对于 Google Scholar PDF Reader:

deno task patch integrations/google-scholar-pdf-reader
--vimium-id VIMIUM2_ID --chrome-version CHROME_VERSION

把 VIMIUM2_ID 替换为第 1 步中或 chrome://extensions 里显示的 Vimium2 ID,把 CHROME_VERSION 替换为 chrome://version 中显示的完整版本号(例如 153.0.8010.36)。

这会从 Chrome Web Store 下载对应 Chrome 版本的目标扩展,给它打补丁,并打印出已打补丁扩展所在的目录。

你也可以直接提供要打补丁的扩展;见 deno task patch --help。

打补丁完成后,打开 chrome://extensions,用 Load unpacked 加载已打补丁的扩展。你应该禁用或移除该扩展的原版或之前打过补丁的版本。

你需要在 Vimium2 的设置中显式将已打补丁的扩展加入白名单,以免随机的(可能恶意的)扩展获得对 Vimium2 的访问权限。

每个集成在 integrations/ 下都有自己的目录。

其中的 integration.js 描述要打什么补丁;可选的 page.js 包含在目标扩展内部运行的代码。

目前集成支持标签页中的页面和内嵌 frame,但不支持弹窗或侧边栏。

Vimium 非常棒。我无法想象没有它的生活。

理想情况下,我想把这个想法上游到 Vimium(philc/vimium#4874),但进展不大。

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →