Shadowrocket脚本功能通过JavaScript实现请求的自动化处理,支持修改请求头、重定向和动态分流,本文详解脚本配置流程、全局路由模式差异及常见问题排查,助力跨境办公与学术资源访问效率提升。
Shadowrocket脚本功能核心机制
Shadowrocket脚本功能基于JavaScript引擎,允许用户在请求发出前或响应返回后执行自定义逻辑,与静态规则不同,脚本可依据URL参数、响应状态或时间戳进行动态决策,适用于复杂的跨境办公场景和学术资源访问需求。
脚本配置完整流程
-
获取脚本资源 从可信仓库下载
.js或.sgmodule文件,存储至iCloud或本地文件系统,建议优先选择开源社区维护的脚本,避免使用来路不明的代码。 -
导入模块配置 打开Shadowrocket -> 配置 -> 模块 -> 右上角加号,粘贴脚本URL或选择本地文件,系统会自动解析
[Script]字段中的脚本名称与执行时机。 -
设置执行模式 进入脚本详情页,配置
type参数:[Script] 脚本名称 = type=http-request,pattern=^https?://api\.example\.com,script-path=local.js,requires-body=truehttp-request用于修改请求,http-response用于处理返回数据。 -
启用MitM证书 若脚本需解密HTTPS流量,须在设置 -> 证书 -> 生成新证书 -> 安装并信任,此步骤对处理学术数据库登录态保持至关重要。
-
验证执行日志 开启设置 -> 调试 -> 日志记录,查看脚本是否触发,正常执行会显示
Script evaluating和完成状态码。
全局路由四模式深度对比
Shadowrocket的"全局路由"决定流量进入代理前的处理逻辑:
| 模式 | 工作机制 | 适用场景 |
|---|---|---|
| 配置 | 优先匹配配置文件中的规则,未命中走直连 | 日常使用,平衡速度与访问 |
| 代理 | 所有流量强制走节点,忽略规则列表 | 测试节点连通性,临时全局加速 |
| 直连 | 完全绕过代理,直接连接目标服务器 | 访问境内金融类App,避免风控 |
| 场景 | 根据Wi-Fi/蜂窝网络自动切换上述模式 | 跨办公室与家庭网络环境切换 |
脚本功能仅在"配置"和"代理"模式下生效,选择"直连"时,请求不会经过Shadowrocket的HTTP处理引擎,导致脚本失效。
高阶应用场景实践
动态请求头修改
跨境办公中,部分协作平台会检测客户端时区,通过脚本自动注入Accept-Language和Timezone头部,可保持与团队环境一致:
const modifiedHeaders = $request.headers;
modifiedHeaders['X-Forwarded-For'] = '203.0.113.1';
$done({headers: modifiedHeaders});
智能广告拦截
结合pattern正则匹配,脚本可识别追踪域名并返回空响应,相比传统规则更节省内存,适合长时间学术文献检索。
对于需要稳定国际网络加速的用户,建议选择支持脚本过滤的节点服务商,优质线路通常提供低延迟的中转通道,确保脚本处理后的请求仍保持毫秒级响应。
常见问题排查
现象:脚本显示已加载但无效果
原因:MitM证书未正确安装,或目标域名未开启解密。
解决方法:检查设置 -> 通用 -> 关于本机 -> 证书信任设置,确保Shadowrocket根证书已启用;在配置文件中添加force-http-engine-hosts = %APPEND% target.com。
现象:启用脚本后内存占用飙升
原因:脚本存在循环引用或大量正则匹配未命中。
解决方法:在[Script]段添加timeout=10参数限制执行时间;优化正则表达式,使用非贪婪匹配替代。
现象:特定学术网站打不开,关闭脚本后正常 原因:脚本修改了请求体导致服务器拒绝。 解决方法:在脚本开头添加域名白名单判断:
if (/safe-site\.edu/.test($request.url)) {
$done({});
}
现象:iOS 16以上系统频繁杀后台
原因:脚本执行占用CPU过高,触发系统资源管理。
解决方法:减少同时启用的脚本数量,优先使用cron类型脚本替代实时处理;选择计算资源更充足的节点服务器分担处理压力。
长期进行国际网络加速的用户,应定期检查脚本更新,开发者常针对目标网站API变更调整脚本逻辑,过期脚本可能导致跨境办公工具认证失效,选择提供自动订阅更新的节点服务,可同步获取配套脚本维护,确保Shadowrocket脚本功能持续稳定运行。