导读:
Shadowrocket 的远程脚本(Remote Script)是指存储在远程服务器(如 GitHub、Gist、自建服务器等)上的 JavaScript 文件,Shadowrocket 可以通过 URL 自动下载并执行这些脚本,用于实现请求修改、数据解析、自动任务等功能。
以下是关于 Shadowrocket 远程脚本的详细配置指南:
脚本配置格式
在 Shadowrocket 配置文件的 [Script] 部分添加:
[Script] 脚本名称 = type=http-request|http-response|cron,script-path=远程脚本URL,requires-body=0|1,timeout=30,pattern=正则表达式
参数说明:
- type: 脚本类型
http-request: 修改 HTTP 请求http-response: 修改 HTTP 响应cron: 定时任务(后台脚本)
- script-path: 远程脚本 URL(支持
https://或file://) - pattern: 匹配 URL 的正则表达式(cron 类型不需要)
- requires-body: 是否需要 body(0=否,1=是)
- timeout: 超时时间(秒)
- script-update-interval: 脚本更新间隔(小时,可选)
配置示例
示例 1:HTTP 请求/响应脚本
[Script] B站去广告 = type=http-response,script-path=https://raw.githubusercontent.com/example/bilibili.js,pattern=^https?:\/\/app\.bilibili\.com\/x\/v2\/feed\/index,requires-body=1,timeout=10 京东比价 = type=http-response,script-path=https://raw.githubusercontent.com/example/jd_price.js,pattern=^https?:\/\/api\.m\.jd\.com\/client\.action\?functionId=wareBusiness,requires-body=1,timeout=30
示例 2:定时任务脚本(Cron)
[Script] 网易云签到 = type=cron,script-path=https://raw.githubusercontent.com/example/netease_sign.js,cronexp=0 9 * * *,timeout=60
示例 3:强制更新间隔
[Script] TestScript = type=http-response,script-path=https://example.com/test.js,script-update-interval=0,pattern=^https?:\/\/test\.com,requires-body=1
注:script-update-interval=0 表示每次都会检查更新
脚本编写规范
Shadowrocket 脚本基于 JavaScript,支持以下全局对象:
// 请求对象(http-request)
var $request = {
url: "https://example.com",
method: "GET",
headers: {},
body: ""
};
// 响应对象(http-response)
var $response = {
status: 200,
headers: {},
body: ""
};
// 常用函数
$done({}); // 结束脚本并返回修改后的数据
$notify("标题", "副标题", "内容"); // 发送通知
$httpClient.get/post(); // 发起 HTTP 请求
$persistentStore.read/write(); // 持久化存储
简单示例脚本:
// 修改响应体示例
let body = $response.body;
let obj = JSON.parse(body);
obj.data.vip = true;
$done({body: JSON.stringify(obj)});
添加方式
直接编辑配置
- 打开 Shadowrocket → 配置 → 选择一个配置 → 编辑纯文本
- 在
[Script]段落添加脚本规则
通过模块(Module)
创建 .sgmodule 文件并导入:
[Script]
脚本名称 = type=http-response,script-path=https://example.com/script.js,pattern=^https?:\/\/api\.example\.com,requires-body=1
注意事项
- HTTPS 证书:远程脚本必须通过 HTTPS 加载,且证书需有效
- 缓存机制:脚本会本地缓存,修改后需手动更新或设置
script-update-interval - 权限问题:iOS 14+ 可能需要开启「本地网络」权限
- 内存限制:Shadowrocket 脚本执行有内存限制,避免处理过大的响应体
- 兼容性:部分为 Surge/Quantumult X 编写的脚本可能需要微调才能在 Shadowrocket 运行
常用脚本源
- GitHub/Gist: 大多数开发者将脚本托管在 GitHub
- Script Hub: 一些转换工具可以将其他工具的脚本转换为 Shadowrocket 格式
- 本地调试: 使用
file://协议加载本地脚本进行调试
调试技巧
在脚本中添加日志:
console.log("调试信息");
$notify("调试", "请求URL", $request.url);
查看日志:Shadowrocket → 设置 → 调试 → 日志记录。
提示:使用远程脚本时请注意隐私安全,建议审查脚本内容后再使用,避免使用来源不明的脚本,以防泄露 Cookie 等敏感信息。