基本解释

利用 JavaScript (脚本) 扩展 Surge 的各项功能!

每行都有两个部分:脚本名称和参数。


由于进行脚本修改会需要 Surge 先将 response body 完全下载后再进行处理,如果遇到了较大的数据将导致内存占用量暴增,Surge iOS 受系统内存限制在该情况下极易被直接终止。所以请务必仔细配置 URL 匹配规则,仅对需要的 URL 进行处理。

<aside> ⚠️ 请仅为必要的 URL 启用脚本。 如果响应主体大小超过“最大大小”值,Surge 将放弃对该请求执行脚本并回退到 passthrough 模式。

</aside>

脚本类型


http-request(HTTP 请求), http-response(HTTP 响应), cron(在指定时间执行), event(在发生某事件时执行), dns(使用脚本进行 DNS 查询), rule(使用脚本来作为代理规则).

HTTP Request

使用脚本修改 HTTP 请求。值字段是一个 URL 正则表达式,只有 URL 被正则匹配的请求才会被执行脚本。

HTTP 请求 = type=http-request,pattern=^http://httpbin.org script-path=http-request.js,max-size=16384,debug=true,requires-body=true

HTT Response

使用脚本修改 HTTP 响应,值字段是一个 URL 正则表达式,只有 URL 被正则匹配的请求才会被执行脚本。

[Script]
# Display netflix ratings(IMDb、~~douban~~)
nf_rating_season = type=http-response,pattern=^https?://ios\\.prod\\.ftl\\.netflix\\.com/iosui/warmer/.+type=show-ath,requires-body=1,max-size=0,script-path=https://raw.githubusercontent.com/yichahucha/surge/master/nf_rating_season.js
[MITM]
hostname = ios.prod.ftl.netflix.com

Cron

在指定时间执行脚本,触发时间配置使用 crontab 的样式,该类型下第二参数为 crontab 表达式,常见的 crontab 为五位表示,即 * * * * * 表示每分钟执行一次,Surge 兼容五位表示和六位表示,可用 * * * * * * 表示每秒钟执行一次。但不支持 @daily 这样的别名。

脚本任务执行完毕后请调用 $done() 退出