con un clic
add-content-script
添加一个新的 Content Script,注入到过早客论坛页面中。包含脚本创建、Vue 应用挂载和在主入口注册的完整流程。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Menú
添加一个新的 Content Script,注入到过早客论坛页面中。包含脚本创建、Vue 应用挂载和在主入口注册的完整流程。
Instalar con Codex o Claude Copia este prompt, pégalo en Codex, Claude u otro asistente, y deja que revise la página de la skill y la instale por ti.
Basado en la clasificación ocupacional SOC
代码生成后执行自动化质量检查。运行 Prettier 格式化、ESLint 检查修复和 TypeScript 类型检查。
以持续追问的方式"拷问"用户的设计方案或计划,沿决策树逐一解决每个分支的依赖关系,直到达成共识。当用户想要压力测试方案、被"盘问"设计思路,或提到"拷问我"/"grill me"/"审查方案"/"盘问方案"/"帮我梳理"等表达时使用。
为项目端到端地添加一个完整的新功能。覆盖从需求分析到代码生成、测试验证的全部流程,涉及 Content Script、Vue 组件、选项配置、国际化等多个层面。
为过早客论坛页面添加新的 HTML 解析函数,从论坛 HTML 中提取结构化数据。遵循项目现有的正则解析模式。
为项目添加国际化翻译。使用 vue-i18n 管理中文和英文翻译,包含翻译 key 设计、文件更新和使用方式。
在扩展的选项页面中添加一个新的子页面。包含路由配置、Vue 页面创建和侧边栏导航集成的完整流程。
| name | add-content-script |
| description | 添加一个新的 Content Script,注入到过早客论坛页面中。包含脚本创建、Vue 应用挂载和在主入口注册的完整流程。 |
在执行本 Skill 前,先阅读以下知识库文件以获取必要的背景知识:
.codebuddy/knowledge/architecture.md - 理解 Content Script 注入机制和存储同步流程.codebuddy/knowledge/forum-domain.md - 了解论坛页面 DOM 结构和已有 CSS 选择器Content Script 是注入到 www.guozaoke.com 论坛页面的脚本,可以为论坛添加 UI 组件和交互功能。所有 Content Script 通过 src/scripts/index.ts 统一注册。
src/scripts/
├── index.ts # 主入口 - 注册所有脚本
├── block-keyword.ts # 关键字屏蔽
├── block-user.ts # 用户屏蔽
├── dblclick-to-top.ts # 双击回到顶部
├── float-user-info.ts # 悬浮用户信息
├── header.ts # 顶部导航增强
├── hide-gzk-info.ts # 隐藏论坛信息
├── hide-topic.ts # 隐藏主题
├── set-appearance.ts # 设置外观
├── topic.ts # 主题增强
└── upload-bili-img.ts # B站图床上传
在 src/scripts/ 中创建新文件,遵循命名规范(kebab-case):
// src/scripts/my-feature.ts
import { createScriptApp } from '@/utils';
import { SELECTOR_SOME_ELEMENT } from '@/constants/selector';
import MyFeatureComponent from '@/components/MyFeature.vue';
import type { Pinia } from 'pinia';
export const createMyFeatureApp = (pinia: Pinia) => {
const containerParentNode = document.querySelector(SELECTOR_SOME_ELEMENT);
if (!containerParentNode) {
return;
}
createScriptApp({
root: MyFeatureComponent,
pinia,
containerId: 'gzk-my-feature-app',
containerParentNode,
});
};
src/scripts/index.ts 中注册// 添加导入
import { createMyFeatureApp } from './my-feature';
// 在 setupApp 函数中添加条件调用
const setupApp = async () => {
const { options } = await getStorage();
// ... 已有代码
if (options[OptionsKey.MyFeature]?.checked) {
createMyFeatureApp(pinia);
}
};
在 src/components/ 中创建组件:
<script setup lang="ts">
import { ElementConfig } from '@/directives';
</script>
<template>
<ElementConfig>
<div class="my-feature">
<!-- 功能 UI -->
</div>
</ElementConfig>
</template>
<style lang="scss" scoped>
.my-feature {
// 样式(注意 scoped)
}
</style>
在 src/constants/selector.ts 中添加新的 DOM 选择器:
export const SELECTOR_MY_ELEMENT = '.some-css-class';
如果功能需要用户开关控制:
OptionsKey 枚举中添加新键defaultExtensionOptions 中添加默认值Options 类型中添加对应字段src/views/basic-setting/ 中添加设置 UIcreateScriptAppinterface ScriptAppOptions {
root: Component; // Vue 根组件
pinia: Pinia; // Pinia 实例
containerId: string; // 挂载容器 ID(格式: 'gzk-{name}-app')
containerParentNode: Element | null; // 父容器 DOM 节点
}
getStorage / setStorageimport { getStorage, setStorage } from '@/utils';
const { options } = await getStorage();
await setStorage({ options: newOptions });
位置: src/constants/selector.ts
export const SELECTOR_LOGIN_USER_LINK = '.navbar-right a[href^="/u/"]';
export const SELECTOR_TOP_NAVBAR = '.navbar-fixed-top';
export const SELECTOR_TOPIC_LINK = 'a[href^="/t/"]';
export const SELECTOR_USER_AVATAR = '.avatar';
export const SELECTOR_USER_LINK = 'a[href^="/u/"]';
export const SELECTOR_NODE_LINK = 'a[href^="/go/"], a[href^="/node/"]';
export const SELECTOR_MSG_UNREAD_INDICATOR = 'a[href="/notifications"]';
const enum 定义枚举import type 导入类型gzk-{name}-app 格式