使用Trae将油猴脚本打包成谷歌插件

作为一个效率至上的开发者,我一直习惯用油猴脚本来扩展网页功能,提升日常开发效率。这也是我写下《油猴脚本实战指南》这本小册的初衷。

直到有一天,我突然想到:能不能把油猴脚本直接"打包"成原生谷歌插件?这样既能保留脚本的灵活性,又能享受插件的完整能力,岂不是一举两得?

想要做到这一点,就必须掌握谷歌插件的基本开发流程。于是,我整理并写下了一篇超详细、超全面的《谷歌插件极速入门实战指南》。

最终,我也梳理出一套可行的方法,能帮助大家把油猴脚本"无缝迁移"到原生谷歌插件中,供大家参考。

油猴脚本打包成谷歌插件的本质

首先我们要明确,油猴脚本与 Chrome 插件在开发与发布方式上存在显著差异。目前并没有任何工具可以实现"一键打包"将油猴脚本直接转换为原生 Chrome 插件。

这里我们所说的"打包",更准确地说,是借助一些辅助手段,将油猴脚本的项目结构和逻辑迁移为一个可运行的 Chrome 插件

在《谷歌插件极速入门实战指南》一节中,我介绍了一个简单插件通常包含如下目录结构:

js 复制代码
my-extension/
├── manifest.json     # 插件的核心配置文件(必需)
├── background.js     # 后台脚本,处理事件监听、消息通信等(可选)
├── content.js        # 注入到网页中的脚本,操作 DOM 等(可选)
└── icon.png          # 插件图标(可选)

简单脚本的改造

如果你的油猴脚本 未使用任何油猴 API(即 @grant none) ,那么迁移成本几乎为零。你只需将脚本元信息转写为 manifest.json 配置,将核心逻辑复制到 content.js 中即可。

例如,将下面这个简单的油猴脚本------"自动切换网页背景图"迁移成 Chrome 插件,操作非常直接:

要改造的原生油猴脚本

js 复制代码
// ==UserScript==
// @name         石小石的背景切换脚本
// @namespace    http://tampermonkey.net/
// @version      0.0.1
// @description  自动为网页更换高清背景图片
// @author       石小石
// @match        *://*/*
// @grant        none
// ==/UserScript==

(function () {
  'use strict';

  console.log("====石小石的背景切换油猴脚本====");

  const randomImageUrl = `https://picsum.photos/1920/1080?random=${Date.now()}`;

  document.body.style.backgroundImage = `url(${randomImageUrl})`;
  document.body.style.backgroundSize = "cover";
  document.body.style.backgroundPosition = "center";
  document.body.style.backgroundRepeat = "no-repeat";
})();

改造后的 Chrome 插件结构

js 复制代码
my-extension/
├── manifest.json
├── content.js

manifest.json

js 复制代码
{
  "manifest_version": 3,
  "name": "石小石的背景切换脚本",
  "version": "0.0.1",
  "description": "自动为网页更换高清背景图片",
  "content_scripts": [
    {
      "matches": ["*://*/*"],
      "js": ["content.js"]
    }
  ],
}

content.js

js 复制代码
//content.js

console.log("====石小石的背景切换谷歌插件====");

(function () {
  const randomImageUrl = `https://picsum.photos/1920/1080?random=${Date.now()}`;
  document.body.style.backgroundImage = `url(${randomImageUrl})`;
  document.body.style.backgroundSize = "cover";
  document.body.style.backgroundPosition = "center";
  document.body.style.backgroundRepeat = "no-repeat";
})();

但是,如果一个脚本使用了很多油猴API,迁移工作就会复杂一点,我们需要将使用的油猴API替换成谷歌插件API,同时,需要将部分逻辑写在background.js

perl 复制代码
my-extension/
├── manifest.json        # 插件的核心配置文件           
├── background.js        # 后台脚本,可以使用谷歌插件的所有API   
├── content.js           # 注入网页的脚本,有限制的使用谷歌插件API            

复杂脚本的改造

当你的脚本使用了大量油猴特有的 API(如 GM_xmlhttpRequestGM_setValueGM_registerMenuCommand 等),迁移就不再是"复制粘贴"这么简单了。

此时,你需要将油猴 API 替换为 Chrome 插件所支持的 API,同时根据功能拆分逻辑:

  • 将页面操作部分保留在 content.js
  • 将需要权限、跨域请求、持久存储等复杂逻辑拆分至 background.js
  • manifest.json 中声明权限,类似油猴的@grant

示例结构如下:

js 复制代码
my-extension/
├── manifest.json     # 插件核心配置
├── background.js     # 后台脚本,可使用完整的 Chrome API
├── content.js        # 页面脚本,权限受限

使用Trae的智能体实现脚本迁移

自定义智能体

借助Trae的智能体,将油猴脚本迁移成谷歌插件非常便捷容易。创建一个脚本迁移的自定义智能体步骤如下:

在Trae的AI 对话窗口中点击**「设置」** 图标 ,然后切换至**「智能体」**选项。

提示词部分填入如下自定义Prompt:

js 复制代码
你是一位专业的油猴脚本转换专家,擅长将油猴脚本迁移为原生 Chrome 插件。
请遵循以下要求改造:
基本要求:
 - 功能保持一致:仅进行代码迁移,确保不改变原有功能逻辑。
 - 符合 Manifest V3 规范:输出完整的 manifest.json,其内容应尽量还原脚本原有元信息(如名称、描述、匹配规则等)。
 - 标准插件结构:目录结构应清晰规范,便于开发者直接加载和调试。
 - 项目迁移完毕,可以删除项目中多余的文件。
情况一:脚本未使用油猴 API
 - 直接将脚本逻辑迁移至 content.js,作为 Content Script 注入页面。。
 - 结构保持精简,仅包含 manifest.json 和 content.js。
情况二:脚本使用了油猴 API
 - 将油猴 API 替换为对应且合适的 Chrome 插件 API
 - 合理拆分代码逻辑,页面交互部分放入 content.js,与权限、数据、网络相关的逻辑放入 background.js。
 - 如有API使用情况,配置合适的 permissions、host_permissions 等字段。

智能体迁移实战

  • 脚本迁移

接下来,我们将使用刚才创建的智能体,通过 Trae 快速将下图的背景切换脚本完成迁移改造。

上述脚本在执行时,会为当前网页添加一个随机背景。

选择该智能体后,点击执行,开始脚本转换。

脚本改造完毕,点击『全部接受』应用代码。

从上图可以看出,对于这类简单脚本,Trae 的改造表现非常出色:不仅准确迁移了核心逻辑,还贴心地生成了 README.md,并自动配置了插件图标。

当然,也有些小瑕疵,比如它忘了删除原有的 index.js 文件。不过这并不影响使用,手动清理一下即可。

注意,Trae生成的icons 不一定满足要求,可以在iconfont下载图标替换。

  • 加载插件

要运行插件非常简单:打开 Chrome 扩展程序页面,启用『开发者模式』,点击『加载未打包的扩展程序』,选择我们创建的项目文件夹即可。

然后,扩展程序页面中就会添加一个如下插件。

  • 效果验证

此时,你会在浏览器右上角看到插件图标,说明插件已成功加载。

接着,随便打开一个网页,就能看到背景已被替换,说明插件逻辑已成功注入并生效。

总结

将油猴脚本打包为原生 Chrome 插件,实质上就是将脚本逻辑迁移到插件架构中。对于简单脚本,借助 AI 可以高效完成迁移,大大提升开发效率。但当脚本逻辑变得复杂时,AI 迁移的出错率也会显著增加。因此,只有深入理解 Chrome 插件的开发原理,才能更好地借助 AI 工具,实现准确、稳定的迁移。

相关推荐
冴羽21 分钟前
今日苹果 App Store 前端源码泄露,赶紧 fork 一份看看
前端·javascript·typescript
蒜香拿铁24 分钟前
Angular【router路由】
前端·javascript·angular.js
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
西洼工作室1 小时前
高效管理搜索历史:Vue持久化实践
前端·javascript·vue.js
广州华水科技1 小时前
北斗形变监测传感器在水库安全中的应用及技术优势分析
前端
开发者如是说1 小时前
Compose 开发桌面程序的一些问题
前端·架构
旺代2 小时前
Token 存储与安全防护
前端
洋不写bug2 小时前
html实现简历信息填写界面
前端·html
三十_A3 小时前
【无标题】
前端·后端·node.js
excel3 小时前
Vue 编译器源码解读:transformVBindShorthand 的设计与原理
前端