GameMale
登陆 / 注册 搜索

USERCENTER

SEARCHSITE

搜索

查看: 967|回复: 7
收起左侧

[问题求助] 【脚本求助】如何取消修改网页元素的脚本在加载时导致的页面突变?

[复制链接] |关注本帖

SCP-s-1889-第二页缘起星空虚空之海的鲸裸体克里斯圣甲虫秘典『随时随地开启!』被释放的灵魂『随时随地开启!』无尽的怀表男巫之歌

     楼主| 星之子 发表于 2024-11-15 00:50:32 | 显示全部楼层 |阅读模式 |取消关注该作者的回复
    200金币
    动机
    昨天搓了这么一个油猴脚本:【油猴脚本】自定义左侧边栏,其功能是修改论坛左侧边栏成想要的样子。
    实际使用过程中,还是遇到了一点点问题,即在页面完全加载之前,左侧边栏依然维持原来的样子,加载完成后脚本才会生效——这会导致边栏突变,或者说“闪动”。在打开主页和我的勋章时尤为明显,强迫症震怒。

    需求

    我尝试过使用@Run document-start来调整脚本的运行时点,但这有可能导致脚本加载不稳定,一旦错过了对应时点,脚本就不加载了。而相比不稳定我宁可它闪动(悲)
    总之,希望各位大佬能通过修改这个脚本、或任意能实现相同功能的方法,把这个“闪动”撒掉。提前感谢惹(´▽`ʃ♡ƪ)~

    最佳答案

    查看完整内容

    修改运行时间是唯一正确的做法 因为这个闪动是因为,脚本的默认执行时间是在页面完全加载完之后,再进行的修改 你想不要这个闪动,只能比页面完全加载更早 还有一个方案你可以自己尝试一下 原来的列表,用adblock之类的东西给他干掉 自己用油猴脚本写一个新的 adblock也是在页面加载之前就阻止了,比油猴的docment-start还要快一点 不过可能也会闪,不过闪一般是有变化的话,肉眼感觉比较明显 如果是空白的页面,也许肉眼就感觉 ...

    已有1人关注本帖

    liuhuo0
    回复

    使用道具 举报

    最终幻想XIV『逆境中的幸运女神』苍穹禁城琉璃玉坠黄金树的恩惠炽天使之拥森林鹿夏日柯基苏醒的格罗姆

      本帖最后由 咸鱼鱼 于 2024-11-15 02:47 编辑

      修改运行时间是唯一正确的做法
      因为这个闪动是因为,脚本的默认执行时间是在页面完全加载完之后,再进行的修改
      你想不要这个闪动,只能比页面完全加载更早

      还有一个方案你可以自己尝试一下
      原来的列表,用adblock之类的东西给他干掉
      自己用油猴脚本写一个新的
      adblock也是在页面加载之前就阻止了,比油猴的docment-start还要快一点

      不过可能也会闪,不过闪一般是有变化的话,肉眼感觉比较明显
      如果是空白的页面,也许肉眼就感觉不到了
      你可以尝试一下


        收起(1)
      回复

      使用道具 举报

      『住在GM村』『正在入住GM村』征服之王被释放的灵魂死灵之书圣甲虫秘典破损的旧书吃饱金币的Doge生金蛋的鹅内森·德雷克

        Makima 发表于 2024-11-15 02:50:39 | 显示全部楼层 |取消关注该作者的回复
        试着修改了一下,效果不大行

        说下我的思路:

        给过渡加特效
        or
        一开始把Menu全部隐藏再显示
           

        document.addEventListener('DOMContentLoaded', () => {
            const navMenu = document.querySelector('.nav-menu');
            if (navMenu) {
                navMenu.style.display = 'none';


        (Run document-start,闪动感觉少了,不过有时候会一直不显示(或许得加个检测?

        分成两个脚本,一个隐藏,一个显示状态栏好一点?(还能搞花样

        回复

        使用道具 举报

        男巫之歌内森·德雷克『私有海域』裸体克里斯双向圣杯:焕然意志极·龙の意【圣诞限定】心心念念小雪人小小舞台御医神兔永浴爱河

          墨燝 发表于 2024-11-15 10:46:52 | 显示全部楼层 |取消关注该作者的回复
          我的gpt告诉我可以使用css先隐藏原先的菜单,目前看起来还可以
          @Name @match


          1. // ==UserScript==
          2. // @name         Custom Nav Menu for Gamemale
          3. // @namespace    http://tampermonkey.net/
          4. // @version      0.1
          5. // @description  删除原有导航菜单并添加自定义菜单,在页面加载前隐藏旧菜单避免抖动
          6. // [url=home.php?mod=space&uid=700810]@Match[/url]        https://www.gamemale.com/*
          7. // @grant        none
          8. // @run-at       document-start
          9. // ==/UserScript==

          10. (function() {
          11.     'use strict';

          12.     // 注入CSS隐藏原菜单,避免加载时短暂显示
          13.     const style = document.createElement('style');
          14.     style.innerHTML = `.nav.nav-menu { display: none !important; }`;
          15.     document.head.appendChild(style);

          16.     // 删除原菜单并插入自定义菜单
          17.     window.addEventListener('DOMContentLoaded', () => {
          18.         // 删除旧菜单
          19.         const navMenu = document.querySelector('.nav.nav-menu');
          20.         if (navMenu) {
          21.             navMenu.remove();
          22.         }

          23.         // 创建新的导航菜单
          24.         const newNavMenu = document.createElement('ul');
          25.         newNavMenu.className = 'nav nav-menu';

          26.         // 自定义菜单项列表
          27.         const menuItems = [
          28.             { href: 'https://www.gamemale.com/forum.php', text: '首 页', title: 'BBS' },
          29.             { href: 'https://www.gamemale.com/forum.php?mod=forumdisplay&fid=150&filter=author&orderby=dateline', text: '和谐动漫 ❤', title: '发帖时间倒序的和谐动漫。'},
          30.             { href: 'https://www.gamemale.com/thread-9039-1-1.html', text: '论坛规范 ★', title: '全面禁水!进站必读!' },
          31.             { href: 'https://www.gamemale.com/home.php?mod=task&do=view&id=14', text: '新人升级 ✌', title: '证明你不是机器人!' },
          32.             { href: 'https://www.gamemale.com/thread-70042-1-1.html', text: '常见问题 ?', title: '' },
          33.             { href: 'wodexunzhang-showxunzhang.html', text: '勋章商城 ▢', title: 'Lv.≥2 来开启勋章大世界!' },
          34.             { href: 'https://www.gamemale.com/wodexunzhang-showxunzhang.html?action=my', text: '我的勋章 ▣', title: '' },
          35.             { href: 'https://www.gamemale.com/home.php?mod=magic', text: '道具商店 ✿', title: '用于帖子和日志的神奇东西!' },
          36.             { href: 'https://www.gamemale.com/home.php?mod=spacecp&ac=credit&op=exchange', text: '血液祭献 ⇄', title: '献出血液换得其他属性积分!' },
          37.             { href: 'plugin.php?id=viewui_draw', text: '你画我猜 ✎', title: '你画我猜奖励多多!' },
          38.             { href: 'tshuz_buyname-tshuz_buyname.html', text: '头衔称号 ≛', title: '不可思议的新身份!' },
          39.             { href: 'https://www.gamemale.com/home.php?mod=task', text: '热门任务 ☑', title: '' },
          40.             { href: 'https://www.gamemale.com/forum-165-1.html', text: '近期活动 ✦', title: '' },
          41.             { href: 'https://www.gamemale.com/forum.php?mod=collection&op=all&order=threadnum', text: '专帖合辑 ▤', title: '一网打尽已整合好帖!' },
          42.             { href: 'nds_up_ques-nds_up_ques.html', text: '科考小队▕▀', title: '' }
          43.         ];

          44.         // 动态创建每一个菜单项
          45.         menuItems.forEach(item => {
          46.             const listItem = document.createElement('li');
          47.             if (item.text == '首 页') {
          48.                 listItem.className = 'hover';
          49.             }
          50.             const link = document.createElement('a');
          51.             link.href = item.href;
          52.             link.textContent = item.text;
          53.             link.title = item.title;
          54.             listItem.appendChild(link);
          55.             newNavMenu.appendChild(listItem);
          56.         });

          57.         // 插入新的菜单
          58.         const header = document.getElementById('hd');
          59.         if (header) {
          60.             header.appendChild(newNavMenu);
          61.         }

          62.         // 移除隐藏样式,显示新菜单
          63.         style.remove();
          64.     });
          65. })();
          复制代码



            收起(1)
          回复

          使用道具 举报

          TRPG版塊『居住证: Lv2~6』夏尔夏日柯基光子之海神奇四叶草寶可夢 Pokémon霍格沃兹魔法学校

            福黎 发表于 2024-11-15 20:29:29 | 显示全部楼层 |取消关注该作者的回复
            本帖最后由 福黎 于 2024-11-16 00:29 编辑

            @Name @match


            1. // ==UserScript==
            2. // <span id="kM0.8494679891935208">[url=home.php?mod=space&uid=668096]@Name[/url]  </span>全局:左侧菜单自定义
            3. // @namespace    http://tampermonkey.net/
            4. // @version      1.0
            5. // @description  修改导航菜单按钮的显示内容、悬浮提示和链接
            6. // @author       Étoiles
            7. // @match        https://www.gamemale.com/*
            8. // @grant        GM_addStyle
            9. // @run-at       document-start
            10. // ==/UserScript==

            11. (function () {
            12.   'use strict';

            13.   // ******通过调整代码运行时间开局添加样式隐藏菜单栏
            14.   GM_addStyle(`.nav.nav-menu{display:none;}`)


            15.   // 定义每个按钮的配置,默认保持不变
            16.   // 1 表示按钮不变
            17.   // 0 表示禁止按钮显示
            18.   // 2 表示修改按钮 请按照[2,"按钮名称","鼠标悬停时的按钮描述","按钮关联到的网址"]格式进行填写
            19.   const buttonConfig = {
            20.       "mn_forum": [1],
            21.       // 首 页

            22.       "mn_N2c45": [2,"和谐动漫 ❤","发帖时间倒序的和谐动漫。","https://www.gamemale.com/forum.php?mod=forumdisplay&fid=150&filter=author&orderby=dateline"],
            23.       // 论坛规范

            24.       "mn_Na183": [2,"CODE ⌘","看看CODE版块有啥新鲜事。","https://www.gamemale.com/forum.php?mod=forumdisplay&fid=206&filter=author&orderby=dateline"],
            25.       // 新人升级

            26.       "mn_N69dc": [2,"二手市场 ▧","二手市场一键直达!","https://www.gamemale.com/wodexunzhang-showxunzhang.html?action=showjishou"],
            27.       // 常见问题

            28.       "mn_Nf376": [2,"勋章商城 ▤"],
            29.       // 勋章商城

            30.       "mn_N13d5": [1],
            31.       // 我的勋章

            32.       "mn_Nc5cc": [1],
            33.       // 道具商店

            34.       "mn_N35bc": [1],
            35.       // 血液祭献

            36.       "mn_N34e7": [2,"记录广场 ◉","快速查看当前热点~","https://www.gamemale.com/home.php?mod=space&do=doing&view=all"],
            37.       // 你画我猜

            38.       "mn_N50a7": [2,"头衔称号 ♞"],
            39.       // 头衔称号

            40.       "mn_Ncfa1": [2,"热门任务 ✈"],
            41.       // 热门任务

            42.       "mn_N2e25": [2,"我的访客 ☎","看看有谁来过我的空间。","https://www.gamemale.com/home.php?mod=space&do=friend&view=visitor"],
            43.       // 近期活动

            44.       "mn_N4483": [2,"本月调查 ♬","快速查看所有投票帖。","https://www.gamemale.com/forum.php?mod=collection&action=view&ctid=352&fromop=all"],
            45.       // 专帖合辑

            46.       "mn_Ncc15": [0]
            47.       // 科考小队
            48.   };

            49.   // 创建MutationObserver实例
            50.   const observer = new MutationObserver((mutations) => {
            51.       mutations.forEach((mutation) => {
            52.           if (mutation.type === 'childList') {
            53.               // 获取所有的按钮列表
            54.               const navMenu = document.querySelectorAll('.nav-menu li');

            55.               navMenu.forEach((button) => {
            56.                   const buttonId = button.id;
            57.                   if (buttonConfig.hasOwnProperty(buttonId)) {
            58.                       const config = buttonConfig[buttonId];
            59.                       const displayMode = config[0];

            60.                       if (displayMode === 0) {
            61.                           // 设置为0则隐藏按钮
            62.                           button.style.display = 'none';
            63.                       } else if (displayMode === 2) {
            64.                           // 设置为2则修改按钮
            65.                           const linkElement = button.querySelector('a');
            66.                           if (linkElement) {
            67.                               // 设置按钮显示内容
            68.                               if (config[1]) linkElement.textContent = config[1];
            69.                               // 设置悬浮提示内容
            70.                               if (config[2]) linkElement.title = config[2];
            71.                               // 设置链接
            72.                               if (config[3]) linkElement.href = config[3];
            73.                           }
            74.                       }
            75.                   }
            76.               });

            77.               // *****在修改完代码后重新显示菜单栏
            78.               document.querySelector('.nav.nav-menu').style.display = 'block'
            79.           }
            80.       });
            81.   });

            82.   // 开始观察目标节点
            83.   observer.observe(document.body, { childList: true, subtree: true });
            84. })();
            复制代码


              收起(1)
            回复

            使用道具 举报

            您需要登录后才可以回帖 登录 | 立即注册

            本版积分规则

            文字版|手机版|小黑屋|GameMale

            GMT+8, 2024-12-22 09:49 , Processed in 0.074275 second(s), 53 queries , Redis On.

            Copyright © 2013-2024 GameMale

            All Rights Reserved.

            快速回复 返回列表