腳本需要 Surge iOS 4 或 Surge Mac 3.3.0
您可以根據(jù)需要使用 JavaScript 來擴展 Surge 的功能罚舱。
腳本區(qū)塊
[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
每行有兩個組成部分:腳本名稱
和參數(shù)
昔榴。
常用參數(shù):
-
type
:腳本類型http-request
http-response
cron
event
dns
rule
script-path
:腳本的路徑瓣戚,可以是配置文件的相對路徑、絕對路徑或 URL付翁。script-update-interval
:使用腳本路徑的 URL 時的更新間隔,以秒為單位。debug
:啟用調(diào)試模式读宙。 腳本每次在評估之前從文件系統(tǒng)加載。timeout
:腳本的最長運行時間楔绞。 默認值為 10 秒结闸。argument
:腳本可以使用$argument
獲取值酒朵。
http-request
和 http-response
的參數(shù):
-
pattern
:匹配 URL 的正則表達式模式桦锄。 -
requires-body
:允許腳本修改請求/響應(yīng)體。 默認值為假耻讽。 這種行為代價高昂察纯。 僅在必要時啟用。 -
max-size
:請求/響應(yīng)主體的最大允許大小针肥。 默認值為 131072 (128KB)饼记。 -
binary-mode
:僅適用于 iOS 15 和 macOS。 原始二進制正文數(shù)據(jù)將通過 Uint8Array 而不是字符串值傳遞給腳本慰枕。
腳本編寫需要 Surge 將整個響應(yīng)正文數(shù)據(jù)加載到內(nèi)存中具则。 巨大的響應(yīng)體可能會導(dǎo)致 Surge iOS 崩潰,因為 iOS 系統(tǒng)限制了 Network Extension 可以占用的最大內(nèi)存量具帮。
請只為必要的 URL 啟用腳本博肋。
如果響應(yīng)正文大小超過 max-size
值低斋,Surge 回退到直通模式并跳過此請求的腳本。
基本約束
腳本允許異步操作匪凡。 應(yīng)該調(diào)用 $done(value) 來指示完成膊畴,即使對于不需要結(jié)果的腳本也是如此。 否則病游,腳本會因為超時而收到警告唇跨。
性能
您無需擔(dān)心腳本的性能。 JavaScript 核心非常有效衬衬。
公共 API
基礎(chǔ)信息
$network
該對象包含網(wǎng)絡(luò)環(huán)境的詳細信息买猖。
-
$script
-
$script.name<String>
:正在執(zhí)行的腳本名稱。 -
$script.startTime<Date>
: 當(dāng)前腳本開始的時間滋尉。 -
$script.type<String>
: 當(dāng)前腳本的類型玉控。
-
-
$environment
-
$environment.system<String>
: iOS 或 macOS. -
$environment.surge-build<String>
:Surge 的內(nèi)部版本號。 -
$environment.surge-version<String>
:Surge 的短版本號狮惜。 -
$environment.language<String>
: Surge 當(dāng)前的 UI 語言高诺。
-
持久存儲
$persistentStore.write(data<String>, [key<String>])
永久保存數(shù)據(jù)。 只允許使用字符串讽挟。 如果成功則返回真懒叛。
$persistentStore.read([key<String>])
獲取保存的數(shù)據(jù)。 返回一個字符串或 Null耽梅。
如果 key 未定義薛窥,則具有相同 script-path
的腳本共享存儲池。 使用密鑰時眼姐,可以在不同的腳本之間共享數(shù)據(jù)诅迷。
控制 Surge
$httpAPI(method<String>, path<String>, callback<Function>(result<Object>))
您可以使用 $httpAPI
調(diào)用所有 HTTP API 來控制 Surge 的功能。 不需要身份驗證參數(shù)众旗。 有關(guān)可用功能罢杉,請參閱 HTTP API 部分。
實用工具
-
console.log(message<String>)
記錄到 Surge 日志文件贡歧。
-
setTimeout(function[, delay])
與瀏覽器中的 setTimeout 相同滩租。
$httpClient.post(URL<String> or options<Object>, callback<Function>)
啟動 HTTP POST 請求。 第一個參數(shù)可以是 URL 或?qū)ο蟆?一個示例對象可能看起來像這樣利朵。
{
url: "http://www.example.com/",
headers: {
Content-Type: "application/json"
},
body: "{}"
}
使用對象作為選項列表時律想。 url
是必需的。 如果 headers
存在绍弟,它會覆蓋所有現(xiàn)有的頭字段技即。 body
可以是字符串或?qū)ο蟆?當(dāng)呈現(xiàn)一個對象時,它被編碼為 JSON 字符串樟遣,并且 Content-Type
設(shè)置為 application/json
而叼。
callback: callback(error, response, data)
成功時身笤,錯誤為 Null,響應(yīng)包含 status
和 headers
葵陵。
類似功能:$httpClient.get
, $httpClient.put
液荸,$httpClient.delete
, $httpClient.head
, $httpClient.options
, $httpClient.patch
。
$notification.post(title<String>, subtitle<String>, body<String>)
發(fā)布通知埃难。
$utils.geoip(ip<String>)
執(zhí)行 GeoIP 查找莹弊。 結(jié)果采用 ISO 3166 代碼涤久。
手動觸發(fā)
您可以在 Surge iOS 上手動觸發(fā)腳本涡尘,方法是長按腳本或使用系統(tǒng) Shortcuts.app。
如果您使用 Shortcuts 觸發(fā)腳本响迂,您可以選擇將參數(shù)傳遞給腳本考抄,使用 $intent.parameter
來檢索它。
(完)