使用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 工具,实现准确、稳定的迁移。

相关推荐
跟橙姐学代码3 分钟前
Python 装饰器超详细讲解:从“看不懂”到“会使用”,一篇吃透
前端·python·ipython
pany21 分钟前
体验一款编程友好的显示器
前端·后端·程序员
Zuckjet26 分钟前
从零到百万:Notion如何用CRDT征服离线协作的终极挑战?
前端
ikonan31 分钟前
译:Chrome DevTools 实用技巧和窍门清单
前端·javascript
Juchecar31 分钟前
Vue3 v-if、v-show、v-for 详解及示例
前端·vue.js
ccc101835 分钟前
通过学长的分享,我学到了
前端
编辑胜编程35 分钟前
记录MCP开发表单
前端
可爱生存报告36 分钟前
vue3 vite quill-image-resize-module打包报错 Cannot set properties of undefined
前端·vite
__lll_36 分钟前
前端性能优化:Vue + Vite 全链路性能提升与打包体积压缩指南
前端·性能优化
weJee36 分钟前
pnpm原理
前端·前端工程化