您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
去除MSU每日廣告
// ==UserScript== // @name MSU 去去廣告走 // @namespace http://tampermonkey.net/ // @version 0.21 // @author Alex from MyGOTW // @description 去除MSU每日廣告 // @match https://msu.io/* // @grant none // @run-at document-end // @license MIT // ==/UserScript== (function() { 'use strict'; const checklocal = window.localStorage.getItem('GEAR_UP_MODAL_CHECKED'); const isChecked = checklocal === 'true'; if(isChecked){ console.log('checklocal', checklocal) console.log('今日已清除廣告') return } let isRemoved = false; const waitForElement = (selector) => { return new Promise(resolve => { // 如果元素已存在,直接返回 if (document.querySelector(selector)) { return resolve(document.querySelector(selector)); } // 建立 observer 監聽 DOM 變化 const observer = new MutationObserver(mutations => { if (document.querySelector(selector)) { observer.disconnect(); resolve(document.querySelector(selector)); } }); observer.observe(document.body, { childList: true, subtree: true }); }); } const initialize = async () => { console.log('Initialize being called with URL:', window.location.href); try { console.log('開始等待目標元素...'); // 等待目標元素出現 const targetNode = await waitForElement('div[class*="msu-modal"]'); const blackModal = await waitForElement('div[class*="msu-screen-blocker"]'); console.log('目標元素已找到:', targetNode); // 將該元素設置為 display: none targetNode.style.display = 'none'; blackModal.style.display = 'none'; window.localStorage.setItem('GEAR_UP_MODAL_CHECKED', 'true'); isRemoved = true; document.body.style.overflow = 'auto'; console.log('目標元素已被隱藏'); // 設置 observer 監聽後續變化 const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { if (mutation.addedNodes.length) { // 檢查是否有新的 modal container 被添加 mutation.addedNodes.forEach(node => { if (node.id === 'async-modal-container') { node.style.display = 'none'; console.log('新增的 modal container 已被隱藏'); } }); } }); }); // 監聽 document.body 以捕捉任何新增的 modal observer.observe(document.body, { childList: true, subtree: true }); } catch (error) { console.error('Error initializing:', error); } } const handleUrlChange = (method) => { console.log(`小精靈通知: [${method}] URL 已變化: ${window.location.href}`); if (!isRemoved) { initialize(); } }; const originalPushState = history.pushState; const originalReplaceState = history.replaceState; history.pushState = function(...args) { originalPushState.apply(history, args); handleUrlChange('pushState'); }; history.replaceState = function(...args) { originalReplaceState.apply(history, args); handleUrlChange('replaceState'); }; window.addEventListener('popstate', () => { handleUrlChange('popstate'); }); })();