一种汉化 Clash For Windows 的新思路

2023-09-09 16:19:08 +08:00
 FurryR

TLDR

Clash For Windows 的 mixin 功能可以拿来汉化界面/去广告/etc.

去广告代码如下:

module.exports.parse = ({content}) => {
  if (globalThis.document) {
    const proto = Object.getPrototypeOf(globalThis.document.getElementById('app').__vue__)
    const _init = proto._init
    proto._init = function (...args) {
      _init.apply(this, args)
      this.$nextTick(() => {
        {
          const p = this.$el.parentElement
          if (p) {
            if (p.className == 'ad-img') {
              p.parentElement.parentElement.remove()
            }
          }
        }
      })
    }
  }
  return content
}

正文

最近折腾 CFW 的分规则代理

发现这玩意对于订阅不提供 rules 的情况实在是太麻烦了,一怒之下写了个 mixin 用来自动生成分规则代理

在用到 vm 的时候 electron 报警告 deprecated in renderer process,也就是说 mixin 是在浏览器侧跑的,那么理应可以访问到 document

试了一下成功取得了 app 的 vue 实例,那么只需要 patch 掉 vue.prototype._init 即可实现监听组件初始化

然后在里面用一次 this.$nextTick 即可获得 $el 直攻 DOM 组件

再去判定 className,并将其下子 DOM 的 innerText 修改掉即可实现汉化

这个方法是有点逆天但是能用,并且比替换 asar 方便不知道多少倍,所以我觉得可以试着这样汉化一下 CFW

当然这个的作用不限于汉化,各位有能力的也甚至可以直接给 CFW 加点扩展功能

顺便宣传下自己之前写的项目:

clash-mixin,CFW mixin 插件管理器

clash-rules,CFW 任意代理实现分规则代理(无论供应商是否给你规则),对订阅链接十分友好

2531 次点击
所在节点    奇思妙想
7 条回复
leo97
2023-09-09 17:06:34 +08:00
不用完事
alafun
2023-09-09 19:06:42 +08:00
一直没搞懂 Mixin TUN TAP 啥意思,UWP 回环代理大概知道了
shunia
2023-09-11 09:47:56 +08:00
"发现这玩意对于订阅不提供 rules 的情况实在是太麻烦了"
proxy provider 也不行吗?
dlayC
2023-09-11 15:52:03 +08:00
@alafun https://docs.cfw.lbyczf.com/ 可以参考下这个文档
gydi
2023-09-11 17:10:27 +08:00
要不咱试试 clash verge
Luzaiv7
2023-09-12 18:04:44 +08:00
居然有福瑞
junmoxiao
324 天前
@gydi 作者保护好自己,clashforwin 已经无了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/972287

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX