脚本声明

[Script]
script1 = type=http-response,pattern=^http://www.example.com/test script-path=test.js,max-size=16384,debug=true
scropt2 = type=cron,cronexp="* * * * *",script-path=fired.js
scropt3 = type=http-request,pattern=^http://httpbin.org script-path=http-request.js,max-size=16384,debug=true,requires-body=true
scropt4 = type=dns,script-path=dns.js,debug=true

每一行以空格分隔为两个部分,脚本名称和参数。

不同类型的脚本对值的用途不一样,具体参见后文。

参数表包含的参数有:

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

当返回的数据长度超过 max-size 设定值后,Surge 将放弃对该请求执行脚本并回退到 passthrough 模式。

基本定义

所有脚本允许异步操作,使用 $done(value<Object>) 方法表示完成并返回相应结果。即使是不要求返回结果的脚本类型也应当在完成任务后调用 $done() 退出,否则脚本会因为超时而产生警告。

性能

JS Script 的执行效率极高,不必担心因使用脚本而带来性能问题(Body 修改类除外,会影响整体逻辑),在我们的测试环境下,一个简单脚本的完整执行仅耗时 0.2ms。

公共 API

以下 API 在任何类型脚本中都可以使用,如果有更多需求请在社区提出

当使用参数表时,url 参数必填,其余选填,headers 字段存在将覆盖默认的所有 headers,body 可以为 string 或者 object,为 object 时将自动进行 JSON 编码并设置 Content-Type 为 application/json。

callback 定义为 callback(error<String>, response<Object>, data<String>)

error 为 Null 表示请求成功,response 包含 status 和 headers 两个字段。