上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 40252492 - 

网页文本替换汉化的油猴脚本,支持包含加粗和斜体

[复制链接]
  • TA的每日心情

    2023-9-1 16:15
  • 签到天数: 71 天

    [LV.6]常住居民II

    4

    主题

    48

    回帖

    59

    积分

    初级工程师

    积分
    59
    发表于 2022-10-21 11:53:39 | 显示全部楼层

    本帖最后由 40252492 于 2022-10-21 12:38 编辑

    本帖最后由 40252492 于 2022-10-21 12:37 编辑

    本帖最后由 40252492 于 2022-10-21 12:35 编辑

    本帖最后由 40252492 于 2022-10-21 12:32 编辑

    cxxjackie 发表于 2022-10-20 22:49

    试试这个:

    大佬您好,我试了一下,没有生效,没有显示“测试文本”,还是英文原文
    有个报错,我试着把elmGetter改成ElementGetter,还是没生效(代码里不报错了,但控制台报错依旧)
    image.png
    (开头是我从原JS里粘的,引用的库是我传到greasyfork上的您的1.2.0版本,他们不许引用外部库,没有加允许那啥那行)
    image.png
    您看哇,还是英文原文
    我仔细看了一下,html里有2行,
    第1行的文本是会变的,ID#selectCardsReminder,文本有各种,“请选1张卡”、“请选2张卡”和“丢弃1张卡”等等;
    第2行文本是不变的,ID#waiting-for-opponent,对手操作的时候就会显示“Waiting for your opponent”就是“等待你的对手”
    也有的时候鼠标旁边没有这个悬浮窗
    (再往上一行有个“transform: translateX(870px) translateY(598px)”,好像是识别鼠标在网页里的坐标,我移动鼠标数字就会跟着变化)
    image.png
    打开网页就能看到这个控制台的报错
    进入战斗之后(出现这个悬浮窗之后)还会报一个错
    image.png
    请您帮忙看看啦~~~谢谢!Q3Q

    回复
    订阅

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-10-21 20:40:45 | 显示全部楼层
    40252492 发表于 2022-10-21 11:53
    [md]> 本帖最后由 40252492 于 2022-10-21 12:37 编辑

    > 本帖最后由 40252492 于 2022-10-21 12:35 编辑  ...

    报错是因为没有实例化,ElementGetter是一个类,elmGetter是他的实例,因为你脚本里已经实例化过一次了我就没加。实例的命名其实可以叫任何名字,比如你脚本里好像叫getwenben,改成一样的就行了,我写的主要是一个函数,下面的each只是示范他的用法。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4189

    回帖

    4056

    积分

    管理员

    积分
    4056

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-10-21 23:38:36 | 显示全部楼层
    woc,问题贴60多楼了。。。

    另外哥哥脚本也可以发脚本站和脚本板块哦

    https://scriptcat.org/searchhttps://bbs.tampermonkey.net.cn/forum-2-1.html
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情

    2023-9-1 16:15
  • 签到天数: 71 天

    [LV.6]常住居民II

    4

    主题

    48

    回帖

    59

    积分

    初级工程师

    积分
    59
    发表于 2022-10-25 12:10:12 | 显示全部楼层
    王一之 发表于 2022-10-21 23:38
    woc,问题贴60多楼了。。。

    另外哥哥脚本也可以发脚本站和脚本板块哦

    一 ——之——哥——
    回复

    使用道具 举报

  • TA的每日心情

    2023-9-1 16:15
  • 签到天数: 71 天

    [LV.6]常住居民II

    4

    主题

    48

    回帖

    59

    积分

    初级工程师

    积分
    59
    发表于 2022-10-25 13:47:20 | 显示全部楼层

    本帖最后由 40252492 于 2022-10-25 13:55 编辑

    本帖最后由 40252492 于 2022-10-25 13:51 编辑

    cxxjackie 发表于 2022-10-21 20:40

    报错是因为没有实例化,ElementGetter是一个类,elmGetter是他的实例,因为你脚本里已经实例化过一次了我 ...

    我大概明白了,我把elmGetter改成了getwenben,加了一行括起来的那个,对吧对吧?~OvO
    image.png
    您看您看,现在报错变了,并且网页好像会未响应
    (下图右边红箭头就是,会变的提示是空的的情况,会显示下面一行不变的提示;也有的时候鼠标旁边没有悬浮窗)
    无标题.png
    请您再帮忙看看啦~谢谢!
    image.png

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-10-25 23:06:59 | 显示全部楼层
    40252492 发表于 2022-10-25 13:47
    [md]> 本帖最后由 40252492 于 2022-10-25 13:51 编辑

    > [cxxjackie 发表于 2022-10-21 20:40](forum.php ...

    我没账号进不了对战,而且你这个网站好卡啊,只能凭感觉给你看了。按理来说应该不会有问题,可能是他读取了原来的文本用来做判断之类的,直接替换导致读取出错,把
    1. div.innerText = '测试文本';
    复制代码

    这句改成:
    1. console.log(div.innerText);
    复制代码

    然后看看控制台的输出,是否每次文本变化都有监听到,有的话就不是函数的问题。
    回复

    使用道具 举报

  • TA的每日心情

    2023-9-1 16:15
  • 签到天数: 71 天

    [LV.6]常住居民II

    4

    主题

    48

    回帖

    59

    积分

    初级工程师

    积分
    59
    发表于 2022-10-27 10:14:20 | 显示全部楼层

    cxxjackie 发表于 2022-10-25 23:06

    我没账号进不了对战,而且你这个网站好卡啊,只能凭感觉给你看了。按理来说应该不会有问题,可能是他读取 ...

    1、这个网站的服务器在加拿大,部分地区直连丢包严重,需要轻功
    2、如您方便的话,我可以注册2个帐号给您测试用
    3、我改了代码,↓这是返回的结果,请您帮忙看看啦谢谢!(=3=)/
    image.png
    顺便请问,这个程序应该是什么效果呢?是把所有这个ID的文本,都替换成测试文本吗?

    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-10-27 12:11:25 | 显示全部楼层
    40252492 发表于 2022-10-27 10:14
    [md]1、这个网站的服务器在加拿大,部分地区直连丢包严重,需要轻功
    2、如您方便的话,我可以注册2个帐号 ...

    这个看起来应该有正确监听到文本改动,那个测试文本是我随便写的,试试这样:
    1. const translation = new Map();
    2. translation.set('Select 1 card', '选择 1 张卡');
    3. translation.set(/Select (\d+) cards/, '选择 $1 张卡');
    4. translation.set('Discard 1', '丢弃 1 张卡');
    5. translation.set(/Discard (\d+)/, '丢弃 $1 张卡');
    6. translation.set('Attack!', '攻击!');

    7. getwenben.each('#selectCardsReminder', document, div => {
    8.     listeneTextChange(div, () => {
    9.         let text = div.innerText;
    10.         if (text) {
    11.             for (const [k, v] of translation) {
    12.                 text = text.replace(k, v);
    13.             }
    14.         }
    15.         div.innerText = text;
    16.     });
    17. });
    复制代码

    我估计是数字读取的问题,用正则处理了一下。其他翻译你可以照着格式自己加,我这个写的可能前后少空格之类的,看图看不出来,你自己试试有没有问题。
    回复

    使用道具 举报

  • TA的每日心情

    2023-9-1 16:15
  • 签到天数: 71 天

    [LV.6]常住居民II

    4

    主题

    48

    回帖

    59

    积分

    初级工程师

    积分
    59
    发表于 2022-10-28 14:00:16 | 显示全部楼层

    本帖最后由 40252492 于 2022-10-28 14:03 编辑

    本帖最后由 40252492 于 2022-10-28 14:01 编辑

    谢谢大佬
    我试了一下,进入战斗之后,到我选择卡片的地方,就是Select 1 card这个文本出现的时候,网页会直接未响应,只能关掉再开,反复几次都这样。(后攻在对手选完卡之后 自己选卡的时候未响应,先攻先选卡 直接未响应)
    目前代码是下面这样的,我把帐号密码私聊给您,可能得麻烦进入战斗试一下啦谢谢!!!QAQ

    // ==UserScript==
    // @name         测试
    // @namespace    https://bbs.tampermonkey.net.cn/
    // @version      0.1
    // @description  测试
    // @author       库X崔羊羊
    // @match        https://dulst.com/overdulst*
    // @icon         https://www.google.com/s2/favicons?domain=dulst.com
    // @require      https://greasyfork.org/scripts/450726-elementgetter1-2-0/code/ElementGetter120.js?version=1089539
    // @license MIT
    // ==/UserScript==
    /* globals ElementGetter */
    
    function listeneTextChange(target, callback) {
        const mutationObserver = window.MutationObserver || window.WebkitMutationObserver || window.MozMutationObserver;
        const observer = new mutationObserver(mutations => {
            for (const mutation of mutations) {
                if (mutation.type === 'characterData') callback();
                for (const node of mutation.addedNodes) {
                    if (node.nodeType === 3) callback();
                }
            }
        });
        observer.observe(target, {
            childList: true,
            characterData: true,
            subtree: true
        });
    }
    
    const translation = new Map();
    translation.set('Select 1 card', '选择1张卡');
    translation.set(/Select (\d+) cards/, '选择$1张卡');
    translation.set('Discard 1', '丢弃1张卡');
    translation.set(/Discard (\d+)/, '丢弃$1张卡');
    translation.set('Attack!', '攻击!');
    
    const getwenben = new ElementGetter();
    getwenben.each('#selectCardsReminder', document, div => {
        listeneTextChange(div, () => {
            let text = div.innerText;
            if (text) {
                for (const [k, v] of translation) {
                    text = text.replace(k, v);
                }
            }
            div.innerText = text;
        });
    });
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    881

    回帖

    1379

    积分

    荣誉开发者

    积分
    1379

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-10-28 20:58:59 | 显示全部楼层
    40252492 发表于 2022-10-28 14:00
    [md]> 本帖最后由 40252492 于 2022-10-28 14:01 编辑

    谢谢大佬

    我进不了对战,太卡了,不过猜到原因了,是因为在监听文本修改的回调函数里又修改了文本,死循环了,把:
    1. div.innerText = text;
    复制代码

    这句改成:
    1. if (div.innerText !== text) div.innerText = text;
    复制代码
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表