执行 JavaScript 脚本
使用 JavaScript 可以自定义文本转换、调用 WebView API,并模拟键盘输入。
功能概述
JavaScript 脚本可以:
- 处理选中文本和剪贴板内容
- 使用 WebView 辅助 API 或配置的 Node.js 或 Deno 运行时
- 模拟按键和跨平台键盘快捷键
运行环境
JavaScript 默认在 WebView 中运行,也可使用配置的 Node.js/Deno 运行时;调用 _keyboard.press() 时会自动切换回 WebView。
若配置了自定义 Node.js 或 Deno 可执行文件,TextGO 会改用对应运行时。两者均已配置时,优先使用 Node.js。若未配置自定义运行时,仅在 WebView 执行失败后依次尝试系统中的 Node.js 和 Deno。
可用环境:
- WebView:默认环境,可使用
fetch等标准 WebView API;TextGO 另外提供_和_keyboard - Node.js:配置其自定义运行时路径后使用
- Deno:配置其自定义运行时路径后使用
- 系统回退:未配置自定义运行时时,在 WebView 失败后先尝试 Node.js,再尝试 Deno
在“脚本执行选项”中配置“Node.js 路径”和“Deno 路径”:

创建 JavaScript 脚本
步骤 1:进入脚本管理
- 打开“设置”>“执行脚本”
- 点击“+”按钮打开“新增脚本”窗口
步骤 2:基本信息
动作名称(必填)
- 标识脚本
- 建议使用描述性的名称
动作图标(可选)
- 点击当前动作图标打开图标选择窗口
- 可选择“内置图标”或“上传自定义 SVG”
脚本类型(必填)
- 选择 JavaScript

步骤 3:编写脚本
脚本(必填)
JavaScript 脚本必须包含一个 process 函数:
function process(data) {
// data.clipboard - 剪贴板内容
// data.selection - 选中的文本
// data.datetime - ISO 8601 格式的执行时间
// 返回处理后的文本
return '';
}参数说明:
data:输入数据对象data.clipboard:当前剪贴板的文本内容data.selection:选中的文本内容data.datetime:ISO 8601 格式的执行时间
返回值:
- 字符串会直接返回,其他可序列化值会转换为 JSON
- WebView 脚本可以将
process定义为async函数 - 可以返回空字符串
WebView API
WebView 脚本可使用以下预定义全局变量:
_:es-toolkit提供的工具函数_keyboard:按键模拟 API
模拟键盘输入
_keyboard.press() 支持发送单个按键,或组合修饰键发送按键:
_keyboard.press(key);
_keyboard.press(modifiers, key);key:单个字符或支持的按键名称modifiers:修饰键名称数组
支持的按键名称包括 Enter/Return、Tab、Escape/Esc、Space、Backspace、Delete/Del、ArrowUp 等方向键、Home、End、PageUp、PageDown,以及 F1 至 F12。命名按键和修饰键均不区分大小写。
修饰键别名:
| 修饰键 | 支持的别名 |
|---|---|
| Command | Meta、Cmd、Command、Super、Win、Windows |
| Control | Control、Ctrl |
| Alt | Alt、Option |
| Shift | Shift |
编写跨平台快捷键时,使用 Or 连接一个 Command 别名和一个 Control 别名,顺序不限。例如,CmdOrCtrl、CommandOrControl 和 ControlOrWindows 在 macOS 上使用 Command,在 Windows 上使用 Control。
function process(data) {
_keyboard.press(['CmdOrCtrl'], 'c');
return data.selection;
}TextGO 会按顺序执行多次调用,并在按键队列完成后结束脚本。任一按键操作失败都会使脚本执行失败。由于按键操作具有副作用,这类脚本不会生成工具栏预览。
使用 JavaScript 脚本
创建脚本后,将其添加到快捷键规则:
- 打开“全局快捷键”
- 添加一条新规则
- 在“执行动作”中选择创建的 JavaScript 脚本
- 保存规则
JavaScript 脚本示例
示例 1:文本反转
function process(data) {
return [...data.selection].reverse().join('');
}示例 2:统计字符数
function process(data) {
return [...data.selection].length;
}示例 3:去除重复行
function process(data) {
const lines = data.selection.split('\n');
const unique = [...new Set(lines)];
return unique.join('\n');
}示例 4:统计词频
此示例使用 es-toolkit 提供的 WebView 专用全局变量 _。
function process(data) {
const words = data.selection.toLowerCase().match(/\p{L}+/gu) ?? [];
return _.countBy(words, (word) => word);
}示例 5:保存当前文档
此示例使用 _keyboard,因此会自动在 WebView 中运行。
function process() {
_keyboard.press(['CmdOrCtrl'], 's');
return '';
}