«

vscode里的"油猴插件"

时间:2025-9-16 10:35     作者:六度科技     分类: cursor&vscode


「通杀」方案:
只要编辑器 基于 VS Code 1.90+(Trae、Cursor、 Windsurf、VSCodium、Code - OSS 等),不想碰签名校验、又想开机自动注入 JS/CSS,都可以直接照抄。
核心思路:
内置扩展 + product.json 白名单」——完全不碰被签名的 workbench.html,升级后只需改 1 行 JSON 即可复活。


一、一次制作,到处通用

  1. 新建扩展文件夹(名字随意,下文用 auto-inject

    auto-inject/
    ├─ package.json
    ├─ extension.js
    └─ inject.js        ← 你的「油猴」代码写这里
  2. 三个文件的内容(复制即可)
    package.json

    {
     "name": "auto-inject",
     "displayName": "Auto Inject (Tampermonkey-like)",
     "version": "0.0.1",
     "engines": { "vscode": "^1.90.0" },
     "main": "extension.js",
     "activationEvents": ["*"]
    }

    extension.js

    const fs = require('fs');
    const path = require('path');
    const vscode = require('vscode');
    
    exports.activate = function (context) {
       const code = fs.readFileSync(path.join(__dirname, 'inject.js'), 'utf8');
    
       // 方案 A:只在 workbench 注入一次(最轻量)
       const disposable = vscode.window.registerWebviewPanelSerializer('workbench', {
           deserializeWebviewPanel: (wb, state) => {
               wb.webview.html += `<script>${code}</script>`;
           }
       });
    
       // 方案 B:保证 100% 注入(含动态 iframe/shadowDOM)
       const inject = () => {
           const s = document.createElement('script');
           s.textContent = code;
           document.head.appendChild(s);
       };
       const timeout = setInterval(() => {
           if (typeof document !== 'undefined') {
               clearInterval(timeout);
               inject();
           }
       }, 200);
    
       context.subscriptions.push(disposable);
    };

    inject.js(写你自己的「油猴」脚本)

    console.log('[Auto-Inject] 脚本已生效');
    /* 下面随意发挥,比如自动点按钮、改颜色、加图标等 */
  3. 把扩展放到“内置扩展”目录
    各编辑器路径一览:
    编辑器 内置扩展目录(无就把文件夹拖进去即可)
    Trae %USERPROFILE%\.trae\extensions\auto-inject-0.0.1\
    Cursor %USERPROFILE%\.cursor\extensions\auto-inject-0.0.1\
    Windsurf %USERPROFILE%\.windsurf\extensions\auto-inject-0.0.1\
    VSCodium %USERPROFILE%\.vscode-oss\extensions\auto-inject-0.0.1\
    Code - OSS ~/.vscode-oss/extensions/auto-inject-0.0.1/
    普通 VS Code %USERPROFILE%\.vscode\extensions\auto-inject-0.0.1\

    放进去后不需要手动安装,编辑器会把带版本号的文件夹直接识别为“内置扩展”。


二、告诉编辑器“允许这个扩展在启动阶段就跑”

  1. 打开 resources/app/product.json此文件不在签名校验范围,随便改)。
  2. 在根节点加 / 改两行(没有就新增):
    "extensionEnabledApiProposals": ["auto-inject"],
    "enableBuiltinExtensions": true
  3. 保存,重启编辑器。
    DevTools Console 里出现 [Auto-Inject] 脚本已生效 即成功,且不会再弹“安装损坏”

三、升级后 10 秒恢复
编辑器整包升级会把 resources/app 目录整个换掉,只需:

  1. 再次把 "auto-inject" 写进新的 product.json(第 2 步)。
  2. 扩展本体仍在 ~/.xxx/extensions/auto-inject-0.0.1/无需任何改动

四、常见问题速答 问题 解决
担心 product.json 以后也被签名 目前所有 VS Code 衍生版都没签它,真签了再换 argv.jsonenable-proposed-api 即可。
想注入 CSS inject.jsdocument.head.appendChild(document.createElement('style')).textContent = '你的CSS'
要热更新脚本 inject.jsCtrl+Shift+P → Reload Window 立即生效,无需重启电脑。
公司电脑无管理员权限 本方案全程写用户目录,不需要管理员

五、一句话总结
「内置扩展 + product.json 白名单」是目前 唯一不破坏签名、不弹损坏、升级后 10 秒复活 的通用“油猴”注入法;
所有 VS Code 系 IDE 都能直接复用,一次制作,终身拷贝即可。