示例模块功能详解与最佳实践指南

导读:

  1. 脚本配置格式
  2. 配置示例
  3. 脚本编写规范
  4. 添加方式
  5. 注意事项
  6. 常用脚本源
  7. 调试技巧

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)});

添加方式

直接编辑配置

  1. 打开 Shadowrocket → 配置 → 选择一个配置 → 编辑纯文本
  2. [Script] 段落添加脚本规则

通过模块(Module)

创建 .sgmodule 文件并导入:


[Script]
脚本名称 = type=http-response,script-path=https://example.com/script.js,pattern=^https?:\/\/api\.example\.com,requires-body=1

注意事项

  1. HTTPS 证书:远程脚本必须通过 HTTPS 加载,且证书需有效
  2. 缓存机制:脚本会本地缓存,修改后需手动更新或设置 script-update-interval
  3. 权限问题:iOS 14+ 可能需要开启「本地网络」权限
  4. 内存限制:Shadowrocket 脚本执行有内存限制,避免处理过大的响应体
  5. 兼容性:部分为 Surge/Quantumult X 编写的脚本可能需要微调才能在 Shadowrocket 运行

常用脚本源

  • GitHub/Gist: 大多数开发者将脚本托管在 GitHub
  • Script Hub: 一些转换工具可以将其他工具的脚本转换为 Shadowrocket 格式
  • 本地调试: 使用 file:// 协议加载本地脚本进行调试

调试技巧

在脚本中添加日志:

console.log("调试信息");
$notify("调试", "请求URL", $request.url);

查看日志:Shadowrocket → 设置 → 调试 → 日志记录。


提示:使用远程脚本时请注意隐私安全,建议审查脚本内容后再使用,避免使用来源不明的脚本,以防泄露 Cookie 等敏感信息。

您可以还会对下面的文章感兴趣: