Greasy Fork

나무위키 광고 삭제

일단 모바일에서도 되는 것 같아요;

目前为 2025-03-29 提交的版本。查看 最新版本

// ==UserScript==
// @name        나무위키 광고 삭제
// @namespace   Violentmonkey Scripts
// @icon        https://t2.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=http://namu.wiki
// @match       https://namu.wiki/*
// @grant       none
// @version     1.21
// @author      Xlbatross
// @run-at      document-end
// @description 일단 모바일에서도 되는 것 같아요;
// ==/UserScript==

// MutationObserver 설정
const targetNode = this.document.body;
const config = { childList: true, subtree: true };

const observer = new MutationObserver(mutations => {
    mutations.forEach(() => {
        let parent;

        const queryId = document.querySelector('[data-google-query-id]');
        parent = queryId;
        while (parent && parent.parentElement.children.length == 1)
        {
            let oldParent = parent;
            parent = parent.parentElement;
            if (!parent)
            {
              parent = oldParent;
              break;
            }
        }
        parent?.remove();

        // Power Link
        const powerLinkImg = document.querySelector('img[src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTAiIGhlaWdodD0iMTUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PC9zdmc+"]');
        parent = powerLinkImg;
        // powerLink table 검색
        while (parent && parent.tagName != 'TABLE')
        {
            parent = parent.parentElement;
        }

        // table 위의 parent와 그 위 parent를 확인.
        let table = parent;
        let topParent = table.parentElement.parentElement;
        parent = table.parentElement;

        // table 삭제
        table?.remove();

        // 삭제 후 parent에 a element 확인
        let linkElement = parent.querySelector('a[href]');
        if (!linkElement)
        {
            parent?.remove();
            linkElement = topParent.querySelector('a[href]');
            if (!linkElement)
            {
              topParent?.remove();
            }
        }
    });
});

// 초기 로드 시 MutationObserver 연결
observer.observe(targetNode, config);