
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 相同。
以下正文由 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。