V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
这是一个专门讨论 idea 的地方。

每个人的时间,资源是有限的,有的时候你或许能够想到很多 idea,但是由于现实的限制,却并不是所有的 idea 都能够成为现实。

那这个时候,不妨可以把那些 idea 分享出来,启发别人。
FurryR
V2EX  ›  奇思妙想

一种汉化 Clash For Windows 的新思路

  •  
  •   FurryR · 231 天前 · 2316 次点击
    这是一个创建于 231 天前的主题,其中的信息可能已经有所发展或是发生改变。

    TLDR

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

    • 优点:
      1. 一劳永逸(各种意义上的)
      2. 审查代码比 asar 补丁简单:只要你看得懂 js 就行
      3. 自己 mixin 配置完直接丢给别人,别人直接 C+V 就能汉化
    • 缺点:
      1. 用不了 YAML Mixin 了(可以通过插件管理器解决)
      2. 每次启动都要 patch ,速度比 asar 补丁慢
      3. 汉化脚本一堆 DOM 路径导致可读性比较低(可以通过 querySelector 解决)

    去广告代码如下:

    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 任意代理实现分规则代理(无论供应商是否给你规则),对订阅链接十分友好

    leo97
        1
    leo97  
       231 天前 via Android
    不用完事
    alafun
        2
    alafun  
       231 天前
    一直没搞懂 Mixin TUN TAP 啥意思,UWP 回环代理大概知道了
    shunia
        3
    shunia  
       229 天前
    "发现这玩意对于订阅不提供 rules 的情况实在是太麻烦了"
    proxy provider 也不行吗?
    dlayC
        4
    dlayC  
       229 天前
    @alafun https://docs.cfw.lbyczf.com/ 可以参考下这个文档
    gydi
        5
    gydi  
       229 天前
    要不咱试试 clash verge
    Luzaiv7
        6
    Luzaiv7  
       228 天前
    居然有福瑞
    junmoxiao
        7
    junmoxiao  
       177 天前
    @gydi 作者保护好自己,clashforwin 已经无了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2880 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:50 · PVG 22:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.