哈哈哈哈_ 发表于 前天 22:03

【异界方块】阻止论坛积分弹窗移除操作,持续显示积分弹窗

本帖最后由 哈哈哈哈_ 于 2026-6-12 22:15 编辑

问题背景在论坛发帖或回帖时,每次都会触发积分奖励弹窗,但是弹窗消失速度很快
有时候运气好,触发了大额的奖励,这时想要截图留念,往往已经错过时机了
原理分析浏览器控制台调试观察后,发现论坛前端移除弹窗采用了“先隐藏、后销毁”的方法:
[*]视觉隐藏:先通过 CSS 属性(如 display、visibility 、opacity)让弹窗在页面上不可见(控制台还是可以看到数据的)
[*]彻底销毁:随后调用 removeChild 从 DOM 树中移除该元素。一旦元素被删除,再到控制台中看,是没法查到数据的
解决方案既然明确了销毁机制,我们可以通过重写 removeChild 方法来进行拦截:
[*]拦截判断:改写原生的 removeChild 逻辑,满足id为ntcwin、文字包含“发表”条件,执行脚本内的代码而不是移除元素
[*]强制显示:将已被 CSS 隐藏的弹窗重新修改为可见状态,方便截图
[*]手动释放:为了截图后可以销毁,为弹窗绑定 onclick 事件,手动点击弹窗后,会触发原有的销毁逻辑将其彻底移除

(由于日常回帖量较少,本方案只为了个人使用,提供一种简单的拦截机制,而不引入记账等复杂操作)
(可能会跟记账本冲突)

效果
相比原本的弹窗样式加了黄色的边框 ,要完全跟原本的弹窗一致,删除代码中的这行 child.style.border = '2px solid rgba(255,247,174,1)'; // 边框表示锁定成功

@Name @Name@Match@Name@Match
// ==UserScript==
// @Name         Discuz 积分弹窗拦截
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description拦截积分弹窗
// @author       Me
// @match      https://*.gamemale.com/forum.php*
// @match      https://*.gamemale.com/thread-*
// @match      https://*.gamemale.com/*mod=viewthread*
// @grant      GM_setValue
// @grant      GM_getValue
// @grant      GM_xmlhttpRequest
// @run-at       document-start
// ==/UserScript==

(function () {
    'use strict';

    (() => {
      // 拦截 DOM 移除:阻止 ntcwin 节点删除 ---
      const originalRemoveChild = Element.prototype.removeChild;
      Element.prototype.removeChild = function (child) {
            if (child && child.id === 'ntcwin' && child.textContent.includes("发表")) {
                console.log("%c[锁定] 阻止移除积分弹窗", "background:#222; color:#bada55; padding:2px;");
                // 样式固化:移除时候强制显示
                child.style.setProperty('display', 'block', 'important');
                child.style.setProperty('visibility', 'visible', 'important');
                child.style.setProperty('opacity', '1', 'important');
                child.style.border = '2px solid rgba(255,247,174,1)'; // 边框表示锁定成功
                // 允许手动点击关闭
                child.onclick = function () { originalRemoveChild.call(document.getElementById('append_parent') || child.parentNode, child); };
                return child;
            }
            return originalRemoveChild.apply(this, arguments);
      };
    })();

})();

paleblueeyes 发表于 前天 22:06

哦哦哦这个好。有的时候确实截不到图。

黑暗哈德 发表于 前天 22:06

本帖最后由 黑暗哈德 于 2026-6-12 22:08 编辑

代码部分每次编辑都会重新解析@,还挺麻烦的,如果要分享还是附件方便。
我编辑的时候已经看到楼主的3个版本了。每次编辑前面的都要删掉,如果后面的变了也记得要删。

和我刚才刷新前看到的部分不一样了,和账本不同,这样子不用计算的小惊喜也很有趣。

凯诺斯 发表于 前天 22:07

很实用的小方法惹,这样“一发入魂”的时候就可以很方便截图晒出来了{:6_197:}

Burry 发表于 前天 22:07

消除移除是方便截图塞分吗,那确实很适合。

solyluna007 发表于 前天 22:08

运气差的人不需要这个脚本,概率什么的都是假的

娱乐法师火布偶 发表于 前天 22:09

一直显示出来很方便各种截图了

darkwhitecat 发表于 前天 22:10

这个确实还挺有用的,不过我就算出大额度奖励要截图好像也没什么分享的地方

oct 发表于 前天 22:11

很細節的東西都有CODE 協助
感覺很棒呢:D

164895785 发表于 前天 22:11

很实用的脚本感谢分享   {:6_188:}   (不过根本没有灵魂勋章!

KurisuV 发表于 前天 22:14

非常实用的脚本!以及在泥潭学会的前端小技巧+1

zibatco2 发表于 前天 22:15

对于想要记录大丰收感觉很不错的插件脚本啦~感谢楼主分享惹呢挺好的;P

少炎明神 发表于 前天 22:16

哦哦哦,方便截图的小脚本,适合触发了大量的勋章的人

drhung 发表于 前天 22:20

这下不用担心一闪而过截不到图啦

jbtty 发表于 前天 22:22

有幾次想截圖都真的來不及,希望來不及的次數能摩多摩多{:6_188:}
畢竟會想截圖大多是中大獎哈哈

Remus7 发表于 前天 22:31

这个很有用惹,有时候信号不好,积分一显示就消失噜,只能翻站街日记来看。以后勋章多了,也可以拍下来记录惹。

aaawwwww 发表于 前天 22:37

是的有时候爆的奖励很欧是需要截图保存,不过我也有自己的查看方法惹:$

crino66666 发表于 前天 22:39

有用脚本,出了灵魂就可以美美截图啦~

克莱因蓝 发表于 前天 22:48

https://img.gamemale.com/album/202508/27/154618wt52fzit25qb9aaf.jpg倒是可以截图炫耀了惹 以前截图这个总是拼手速

Floopa 发表于 前天 22:53

這功能感覺對歐皇有用
非洲人是生不出靈魂的~
页: [1] 2 3
查看完整版本: 【异界方块】阻止论坛积分弹窗移除操作,持续显示积分弹窗