油猴汉化脚本

DawninShadow 2020-12-03 PM 479℃ 0条

虽然暴力,但是好用,彳亍!

基础信息:

// ==UserScript==
// @name        脚本名称
// @namespace    命名空间
// @version      版本
// @description  描述
// @author       作者
// @match        脚本作用网站
// @grant        none
// ==/UserScript==

DOM列表生成函数

递归遍历所有节点生成list

function nodeForEach(node) {
      const list = []
      if (node.childNodes.length === 0) list.push(node) //分支子节点直接压入
      Else {//遍历压入当前节点的所有子节点
        node.childNodes.forEach(child => {
          if (child.childNodes.length === 0) list.push(child)
          else list.push(…nodeForEach(child))//获取子节点
        })
      }
      return list
    }

文本替换

    const i18n = new Map([
      [‘ホーム', 'Home'],
      ['ジョブ', 'JOB'],
      ['マグナ','方阵'],
      [‘ゼウス’, ‘宙斯’],
      ['キャラ', 'Character'],
      ['ダメージ', '伤害'],
      ['バハ', '紫巴'],
      ['オメガ', 'U巴'],
      ['コスモス', '宇宙武(大公)'],
      [‘上書', '覆盖'],
    ])


    function replaceText(node) {
      nodeForEach(node).forEach(htmlnode => {
        i18n.forEach((value, index) => {
          // includes可直接使用 === 以提高匹配精度
          const textReg = new RegExp(index, 'g') //正则匹配
          if (htmlnode instanceof Text && htmlnode.nodeValue.includes(index)) //节点为文本节点 , 包含匹配的内容
            htmlnode.nodeValue = htmlnode.nodeValue.replace(textReg, value)//文本替换
          else if (htmlnode instanceof HTMLInputElement && htmlnode.value.includes(index))//输入框节点
            htmlnode.value = htmlnode.value.replace(textReg, value)
        })
      })
    }

replaceText(document.body)

新增节点替换

const bodyObserver = new MutationObserver(mutations => {//如果有DOM变化触发 mutations为变化的列表
    mutations.forEach(mutation => {
        mutation.addedNodes.forEach(addedNode => replaceText(addedNode))//如果为增加新节点,则对增加的节点进行递归替换
    })
})
bodyObserver.observe(document.body, { childList: true, subtree: true }) //开启对body下所有DOM的监听

  标签: none

非特殊说明,本博所有文章均为博主原创。

上一篇 买股票
下一篇 没有了

评论啦~