Closed liby closed 4 years ago
改了一下文件中的 Config,并在 notify 方法内加了一个 console.log,查看是否调用了 $notification.post
notify
console.log
$notification.post
建议使用手机或 Chrome DevTools 中的 Device Mode 查看: 视频地址
抱歉,ssid变量声明出了低级错误,已经修复。
ssid
很少在手机上写代码,Nitro 和 V8 的抛错还是有点区别,我开始也没看出来哪里错了。 不过你还是漏了一个地方,要不我给你提个 PR 吧。
PS: 能写出来东西已经很厉害了,省了大家好多事,棒!
首先说明,功能正常,可以根据 Config 在网络变化时自动调整代理模式
Script 变动
改了一下文件中的 Config,并在
notify
方法内加了一个console.log
,查看是否调用了$notification.post
Script 内容
```javascript let config = { silence: false, // 是否静默运行,默认false cellular: "RULE", // 蜂窝数据下的模式,RULE代表规则模式,PROXY代表全局代理,DIRECT代表全局直连 wifi: "RULE", // wifi下默认的模式 all_direct: ["Unifi 5G"], // 指定全局直连的wifi名字 all_proxy: [], // 指定全局代理的wifi名字 }; // load user prefs from box const boxConfig = $persistentStore.read("surge_running_mode"); if (boxConfig) { config = JSON.parse(boxConfig); config.silence = JSON.parse(config.silence); config.all_direct = JSON.parse(config.all_direct); config.all_proxy = JSON.parse(config.all_proxy); } const isLoon = typeof $loon !== "undefined"; const isSurge = typeof $httpClient !== "undefined" && !isLoon; const MODE_NAMES = { RULE: "🚦规则模式", PROXY: "🚀全局代理模式", DIRECT: "🎯全局直连模式", }; manager(); $done(); function manager() { if (isSurge) { const v4_ip = $network.v4.primaryAddress; // no network connection if (!config.silence && !v4_ip) { notify("🤖 Surge 运行模式", "❌ 当前无网络", ""); return; } const ssid = $network.wifi.ssid; const mode = ssid ? lookupSSID(ssid) : config.cellular; const target = { RULE: "rule", PROXY: "global-proxy", DIRECT: "direct", }[mode]; $surge.setOutboundMode(target); } else if (isLoon) { const conf = JSON.parse($config.getConfig()); const ssid = conf.ssid; const mode = ssid ? lookupSSID(ssid) : config.cellular; const target = { DIRECT: 0, RULE: 1, PROXY: 2, }[mode]; $config.setRunningModel(target); } if (!config.silence) { notify( `🤖 ${isSurge ? "Surge" : "Loon"} 运行模式`, `当前网络:${ssid ? ssid : "蜂窝数据"}`, `${isSurge ? "Surge" : "Loon"} 已切换至${MODE_NAMES[mode]}` ); } } function lookupSSID(ssid) { const map = {}; config.all_direct.map((id) => (map[id] = "DIRECT")); config.all_proxy.map((id) => (map[id] = "PROXY")); const matched = map[ssid]; return matched ? matched : config.wifi; } function notify(title, subtitle, content) { const TIMESTAMP_KEY = "running_mode_notified_time"; const THROTTLE_TIME = 3 * 1000; const lastNotifiedTime = $persistentStore.read(THROTTLE_TIME); if ( !lastNotifiedTime || new Date().getTime() - lastNotifiedTime > THROTTLE_TIME ) { console.log("与 $notification.post 处在同级") $persistentStore.write(new Date().getTime().toString(), TIMESTAMP_KEY); $notification.post(title, subtitle, content); } } notify("title", "subtitle", "content") ```问题说明
问题录制
建议使用手机或 Chrome DevTools 中的 Device Mode 查看: 视频地址