脚本字段 - Surge 使用手册

文章推薦指數: 80 %
投票人數:10人

由于进行脚本修改会需要Surge 先将response body 完全下载后再进行处理,如果遇到了较大的数据将导致内存占用量暴增,Surge iOS 受系统内存限制在该情况下极易被直接 ... Surge使用手册搜索文档…简介总览代理规则策略DNSHTTP处理脚本基础HTTP请求HTTP响应脚本规则事件DNS计划任务其他更新日志由GitBook提供支持基础脚本需要SurgeiOS4或SurgeMac3.3.0以上版本脚本使用JavaScript随心所欲的拓展Surge功能。

脚本字段1[Script]2script1=type=http-response,pattern=^http://www.example.com/testscript-path=test.js,max-size=16384,debug=true3script2=type=cron,cronexp="*****",script-path=fired.js4script3=type=http-request,pattern=^http://httpbin.orgscript-path=http-request.js,max-size=16384,debug=true,requires-body=true5script4=type=dns,script-path=dns.js,debug=true6script5=type=event,event-name=network-changed,control-api=1,script-path=event.jsCopied!每一行都有两个组成部分:脚本名称、参数。

常见的参数:type:脚本的类型,可选值:http-request,http-response,cron,event,dns,rule.script-path:脚本的路径,可以是相对路径、绝对路径或者URL。

script-update-interval:当脚本路径为URL时的自动更新频率,单位为秒。

debug:开启debug模式,如果是一个本地脚本,那么每次执行脚本时,都会从本地存储重新加载脚本,方便调试。

control-api:允许脚本内使用$surge变量,控制Surge。

timeout:脚本的最长运行时间,默认为10s。

http-request/http-response类型脚本的可用参数:pattern:匹配URL的正则。

requires-body:表示该脚本需要对body进行处理,默认为false。

如果只需要修改URL或者Headers请不要开启该选项,将大幅节约资源。

max-size:表示该脚本最大允许处理的body大小,若超过则放弃处理,默认值为131072(128KB)。

由于进行脚本修改会需要Surge先将responsebody完全下载后再进行处理,如果遇到了较大的数据将导致内存占用量暴增,SurgeiOS受系统内存限制在该情况下极易被直接终止。

所以请务必仔细配置URL匹配规则,仅对需要的URL进行处理。

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

基本定义所有脚本允许异步操作,使用$done(value)方法表示完成并返回相应结果。

即使是不要求返回结果的脚本类型也应当在完成任务后调用$done()退出,否则脚本会因为超时而产生警告。

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

公共APIconsole.log(message)输出到Surge日志setTimeout(function[,delay])与浏览器的setTimeout方法一致$httpClient.post(URLoroptions,callback)发起一个HTTPPOST请求。

第一个参数可以是一个URL或参数表,参数表为。

1{2url:"http://www.example.com/",3headers:{4Content-Type:"application/json"5},6body:"{}"7}Copied!当使用参数表时,url参数必选,其余选填,header字段存在会覆盖默认的所有Header。

body可以是string或object。

当为object时,将自动进行JSON编码,并设置'Content-Type'为'application/json'。

callback定义为callback(error,response,data) error为Null表示请求成功,response包含status和headers两个字段。

其余类似的方法有:$httpClient.get,$httpClient.put,$httpClient.delete,$httpClient.head,$httpClient.options,$httpClient.patch。

$notification.post(title,subtitle,body)向通知中心发送通知,SurgeiOS上需开启通知总开关$utils.geoip(ip)进行GeoIP查询,返回结果为ISO3166的国家编码$surge.setSelectGroupPolicy(groupName,policyName)修改select策略组的当前选项,返回bool值表示是否成功$surge.selectGroupDetails()获得当前select策略组的信息,包含组名称,子策略,和当前选择的策略$surge.setOutboundMode(mode)修改Surge的出站模式,返回bool值表示是否成功,取值可为"direct","global-proxy","rule"$surge.setHTTPCaptureEnabled(enabled)控制Surge截获HTTP功能的开启$surge.setCellularModeEnabled(enabled)控制Surge计费网络模式的开启$surge.setRewriteEnabled(enabled)控制Surge重写功能的开启$surge.setEnhancedModeEnabled(enabled)控制Surge增强模式的开启(仅SurgeMac可用)$network当前网络状态的总览,包含IP和SSID等信息$script.name当前执行的脚本的文件名$script.startTime当前执行的脚本的开始时间$persistentStore.write(data,[key])持久化保存数据,返回bool值表示是否成功,仅支持传入string$persistentStore.read([key])读取保存的持久化数据,返回string或Null不传入key时,同一个script-path的脚本共享一个存储池。

可传入一个固定的key以在多个脚本间共享数据。

以前脚本下一个HTTP请求最近更新8moago复制链接内容脚本脚本字段基本定义性能公共API



請為這篇文章評分?