自从今年年初换了机场之后,我从 Shadowsocks-Windows 换到了 Clash for Windows。Clash 确实比纯 SS 好用多了,尤其是订阅功能,特别是订阅里还可以自带一系列分流规则。不过我用的那个订阅规则不够完善,想要自己添加一些。以前用 SS 的时候,我自己写了 PAC 脚本用于实现分流,当然可控性也更好,这次不方便用 PAC 了,就得研究研究 CFW 的功能了,好在有个 Mixin 可以用。

首先给出 CFW 关于 Mixin 的说明文档

这里传入的 content 就是你的 YAML 配置文件(也可能是来自订阅的)。要访问该 YAML 中的内容,可以使用 content.key 或者 content["key"] 的方式。

例如我使用 OneDrive Business,上传下载的网址以 sharepoint.com 结尾,为了让 Clash 直连 ODB,使用 JavaScript 的 unshift() 在订阅的规则前面插入一条新规则。

cfw-profile-mixin: |
  module.exports.parse = async function({ content, name, url }, { axios, yaml, notify }) {
    content.rules.unshift("DOMAIN-SUFFIX,sharepoint.com,DIRECT");
    return content;
  }

当然有了 JS 之后还可以进行更高级的操作,比如我把订阅里的香港线路都提取出来整合成了一个 Load Balance 选项。

module.exports.parse = async function({content, name, url}, {axios, yaml, notify}) {
  content.rules.unshift("DOMAIN-SUFFIX,sharepoint.com,DIRECT");
  proxies = [];
  for (let proxy of content.proxies) {
    if (proxy.server === undefined) continue;
    if (proxy.name.indexOf('Hong Kong') !== -1) {
      proxies.push(proxy.name);
    }
  }
  if (proxies.length > 0) {
    content['proxy-groups'].push({
      'name': 'Load Balance',
      'type': 'load-balance',
      'proxies': proxies,
      'url': 'http://cp.cloudflare.com/generate_204',
      'interval': 3
    });
    content['proxy-groups'][0].proxies.unshift("Load Balance");
  }
  return content;
}

Clash for Windows 0.11.0 之后不再使用 config.yaml 里的配置,而是提供了一个 Settings 界面,可以手动输入 YAML 或者 JavaScript 作为 mixin。首先在 Mixin 那里选择模式为 JavaScript,然后在对应的 Edit 框里输入代码,保存后刷新订阅即可。

image

image

Tags:

Updated:

Leave a comment