Skip to content

fix: 重构 vscode-extension 用 VS Code browser API + CDP 直接注入,替代 IBE 修复集成浏览器无法翻译 - #766

Open
PtJade-Ceramic wants to merge 1 commit into
maboloshi:gh-pagesfrom
PtJade-Ceramic:fix-ibe-document-start
Open

fix: 重构 vscode-extension 用 VS Code browser API + CDP 直接注入,替代 IBE 修复集成浏览器无法翻译#766
PtJade-Ceramic wants to merge 1 commit into
maboloshi:gh-pagesfrom
PtJade-Ceramic:fix-ibe-document-start

Conversation

@PtJade-Ceramic

@PtJade-Ceramic PtJade-Ceramic commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Fixes #765

背景

VS Code 集成浏览器(Integrated Browser Extensions, IBE)注入用户脚本时依赖 new Function(eval)执行脚本,而 github.com 的 CSP(script-src github.githubassets.com,不含 unsafe-eval)会拦截 eval,导致页面完全未翻译(EvalError)。因此无论 document-start 还是 document-end,IBE 都无法在 github.com 上运行任何用户脚本。

变更

本 PR 不再依赖 IBE,改为使用 VS Code 自己的 proposed browser API(vscode.window.browserTabs + startCDPSession())向集成浏览器直接注入:

  • 移除对 boylett.integrated-browser-extensions 的依赖,删除两个 IBE wrapper 脚本(main(vscode).user.jsvscode-extension/main(vscode).user.js
  • 扩展启用 proposed browser API(enabledApiProposals: ["browser"]),需以 --enable-proposed-api maboloshi.github-chinese 启动
  • 在扩展宿主侧从镜像拉取 locals.js + main.user.js,规避页面 CORS 限制
  • 通过 CDP 直接注入(非 eval,可绕过 github.com 的 CSP):
    • Page.addScriptToEvaluateOnNewDocument 注册到新文档,之后导航/刷新自动生效
    • Runtime.evaluate 对当前已加载文档立即执行一次,无需刷新即可翻译当前页面
  • 注入内容内置 GM_* 兼容层(addStyle / getValue / setValue / xmlhttpRequest 等)与 document-end 语义(等 DOMContentLoaded 后执行),main.user.js 无需任何 GM 相关改动
  • 新增 github-chinese.refresh / github-chinese.status 命令
  • 扩展版本升至 2.0.0(破坏性变更:不再依赖 IBE,启动参数变更为 --enable-proposed-api maboloshi.github-chinese

验证

  • 在 VS Code 集成浏览器中实测:注入脚本成功执行,GitHub 首页完全中文化(GM_addStyle 可用、<html lang="zh-CN">、导航与正文均为中文)
  • 提交带 GPG 签名

@maboloshi

Copy link
Copy Markdown
Owner

请先尝试将document-start改为document-body

@PtJade-Ceramic
PtJade-Ceramic marked this pull request as draft August 2, 2026 04:18
@PtJade-Ceramic
PtJade-Ceramic force-pushed the fix-ibe-document-start branch from ad594ce to c3fc493 Compare August 2, 2026 07:51
@PtJade-Ceramic

Copy link
Copy Markdown
Contributor Author

发现:GitHub 的 CSP 阻止 IBE 执行脚本(硬阻塞)

在 VS Code 集成浏览器 + IBE 下实测,脚本注入时被 github.com 的 CSP 拦截:

EvalError: Evaluating a string as JavaScript violates the following Content Security Policy directive
because 'unsafe-eval' is not an allowed source of script: script-src github.githubassets.com
    at new Function
    at runScript (IBE)
  • IBE(Integrated Browser Extensions)通过 new Function(eval)执行用户脚本;
  • github.com 的 CSP(script-src github.githubassets.com,不含 unsafe-eval)禁止 eval;
  • 因此 IBE 在 github.com 上无法执行任何用户脚本——与 document-start / document-end 无关,任何脚本级修复都无法绕过。

这属于 IBE 注入机制与 GitHub 安全策略的根本冲突(且 IBE 已停止维护、源码仓库已删除)。

意图:改为使用 VS Code 自身的 browser API(proposed) 向集成浏览器注入脚本,不再依赖 IBE。正在本分支重构扩展,故先将本 PR 转为草稿(Draft)。

原有 document-end 改动保留作参考(对未被 CSP 拦截的环境无害)。

@PtJade-Ceramic PtJade-Ceramic changed the title 🐛 fix: document-start 注入时判空等待根元素/body,避免初始化崩溃中断翻译 fix: 重构 vscode-extension 用 VS Code browser API + CDP 直接注入,替代 IBE 修复集成浏览器无法翻译 Aug 2, 2026
@PtJade-Ceramic
PtJade-Ceramic force-pushed the fix-ibe-document-start branch from 76e34f2 to 1e42943 Compare August 2, 2026 10:29
@maboloshi

Copy link
Copy Markdown
Owner

browser API 概率不支持相关 GM_* api

@PtJade-Ceramic
PtJade-Ceramic force-pushed the fix-ibe-document-start branch from d8bade8 to 750a833 Compare August 2, 2026 14:45
@PtJade-Ceramic
PtJade-Ceramic marked this pull request as ready for review August 2, 2026 14:46
@PtJade-Ceramic

PtJade-Ceramic commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

已内置 GM_* 兼容层,无需依赖真实 GM API 即可工作:

  • 注入脚本在页面上下文直接定义 GM_addStyle / GM_getValue / GM_setValue / GM_registerMenuCommand / GM_unregisterMenuCommand / GM_notification / GM_xmlhttpRequest
  • 实现:addStyle<style> 注入样式;getValue/setValuelocalStorageghc: 前缀)持久化;xmlhttpRequestfetch 包装
  • 主脚本执行前这些全局已就绪,因此 main.user.js 无需任何 GM 相关改动即可在集成浏览器中工作,也不依赖 IBE 的 GM 注入

已在集成浏览器中实测通过:GM_addStyle 可用、<html lang="zh-CN">、页面正常翻译。

image

- 用 VS Code browser API + CDP 直接注入中文化脚本,替代 IBE(规避 CSP eval 限制)
- 修正 BrowserCDPSession 接口调用(sendMessage/onDidReceiveMessage/close),双保险注入修复集成浏览器无法翻译
- 删除旧的 IBE 适配脚本 main(vscode).user.js,扩展归属改为上游 maboloshi
- 启动参数变更(--enable-proposed-api maboloshi.github-chinese)且不再依赖 IBE,主版本升至 2.0.0
- 更新文档与版本号至 2.0.0
@PtJade-Ceramic
PtJade-Ceramic force-pushed the fix-ibe-document-start branch from 750a833 to 0043ff5 Compare August 2, 2026 15:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

VS Code 集成浏览器:脚本 document-start 注入崩溃导致页面未翻译

2 participants