关于 QX 不能根据网络切换配置的问题,我搞了个奇技淫巧

思路:

搞三套配置,一套是最终和 qx 关联的, result.conf

一套是 openwrt 环境下的, withOP.conf

另外一套是蜂窝网络环境下的, noOP.conf

随便先关联哪一套,但在那一套里设置一条

[task_local]
event-network Auto-switch-config.js, tag=自动切换配置, enabled=true

也就是说网络环境变化时做一些东西,相当于个钩子函数,在 Auto-switch-config.js 用 $enviorment 去获取 ssid ,有 ssid 就是 wifi ,没 ssid 就是蜂窝。同时也可以根据 ssid 的名字去判断在哪个 wifi 下

有网络环境就好办了,然后就是切换配置,用 qx 的$iCloud 去读写那三套的配置,只要不同配置最终写入 result.conf 就行

下面是我的 Auto-switch-config.js 配置,供参考

const isWIFI = $environment.hasOwnProperty('ssid')
const opSSIDS = ['102']

let underOpenwrt = false if(isWIFI){ let ssid = $environment.ssid if(opSSIDS.includes(ssid)){ underOpenwrt = true }else{ underOpenwrt = false } }

const withOpenwrt = "../Profiles/withOp.conf" const noOpenwrt = "../Profiles/noOp.conf" const resultConfig = "../Profiles/result.conf" const filePath = underOpenwrt ? withOpenwrt : noOpenwrt

let read_bytes = $iCloud.readFile(filePath); let textDecoder = new TextDecoder(); let readContent = textDecoder.decode(read_bytes)

let encoder = new TextEncoder(); let writeUint8Array = encoder.encode(readContent);

if ($iCloud.writeFile(writeUint8Array, resultConfig)) { console.log(iCloud 内容已替换为${underOpenwrt?"简约模式":"丰富模式"}); } else { console.log("iCloud 内容已替换失败"); }

$done()

目前用下来确实没问题,但是发现会有大约一分钟时间的延迟,在仓库里也没找到什么能立即 refresh 或 restart 的 api ,但总归是能根据网络环境切配置了,还讲究那么多干嘛

#quantumultx

第 1 条附言  ·  1 小时 7 分钟前

无论在哪个配置下,都要保证有这个task,以便在下一次网络变化时不影响切换

[task_local]
event-network Auto-switch-config.js, tag=自动切换配置, enabled=true