Greasy Fork

Greasy Fork is available in English.

屏蔽minecraft.net官网的网易弹窗

屏蔽minecraft.net官网的网易弹窗,支持旧版和新版的弹窗

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         屏蔽minecraft.net官网的网易弹窗
// @namespace    http://tampermonkey.net/
// @version      0.3.1
// @description  屏蔽minecraft.net官网的网易弹窗,支持旧版和新版的弹窗
// @author       kzyqq00-Player
// @match        https://www.minecraft.net/*
// @license      MIT
// @icon         https://www.minecraft.net/etc.clientlibs/minecraftnet/clientlibs/clientlib-site/resources/favicon-96x96.png
// @grant        none
// @run-at       document-body
// ==/UserScript==

(function () {
    'use strict';

    const BUTTON_ELEMENT_SELECTOR_TEXT = 'div.MC_modal_actions_container.MC_modalA_contentPanel_actions.MC_modal_actions_singlerow > button:nth-child(2)';
    const LEGACY_DIALOG_ELEMENT_SELECTOR_TEXT = '.netease-promotion-popup';

    const buttonElement = document.querySelector(BUTTON_ELEMENT_SELECTOR_TEXT); // 先尝试使用新版按钮
    if (!buttonElement) {
        const legacyDialog = document.querySelector(LEGACY_DIALOG_ELEMENT_SELECTOR_TEXT);
        if (!legacyDialog) { // 如果找不到旧版弹窗,就监测页面变动,一旦监测到了新版按钮出现就点击/旧版弹窗出现就移除
            new Promise((resolve, reject) => {
                const observer = new MutationObserver(() => {
                    const _button = document.querySelector(BUTTON_ELEMENT_SELECTOR_TEXT);
                    const _legacyDialog = document.querySelector(LEGACY_DIALOG_ELEMENT_SELECTOR_TEXT);
                    if (_button || _legacyDialog) { // 如果新版或旧版按钮任意一个存在,则resolve
                        clearTimeout(id);
                        resolve([_button || _legacyDialog, Boolean(_button)]);
                        observer.disconnect();
                    }
                });

                const config = {
                    childList: true,
                    subtree: true
                };
                try {
                    observer.observe(document.querySelector('div.xfpage.page.basicpage'), config); // 尝试监听范围更小的元素;如果没有,则监听body
                } catch (_) {
                    observer.observe(document.body, config);
                }

                const id = setTimeout(() => {
                    observer.disconnect();
                    reject(); // 超时就reject
                }, 1000); // 超时1秒
            })
                .then((res) => {
                    if (res[1]) { // 新版按钮
                        res[0].click(); // 把resolve过来的按钮元素点击
                    } else { // 旧版弹窗
                        document.body.classList.remove('modal-open');

                        res[0].remove();
                    }
                })
                .catch(() => {
                    alert('尝试获取按钮/弹窗失败,可能是因为油猴脚本版本过旧,请尝试更新到最新版本;如果已经是最新版本,请反馈给作者,不需要有其他的描述,给这个弹窗的截图就好');
                    throw new TypeError('Get button element failed');
                });
        } else { // 如果直接找到了旧版弹窗就直接移除
            legacyDialog.remove();
        }
    } else {
        buttonElement.click();
    }
})();