kone
소미소프트

소미소프트

개념글/전체글 버튼 분리 스크립트(수정)

05/27/2025, 09:41:09
유틸
2964 views · 3 likes

스크립트 지식 1도없이 챗지피티로 만들었습니다~ 문제시 글삭함

오류 생기면 스크립트 삭제 추천드려요



1

원래 이렇게 붙어있던 개념글/전체글 버튼을



1

이렇게 분리했습니다. 왼쪽은 전체글 모드, 오른쪽은 개념글 모드


그리고 중요한건 전체글일때 전체글 버튼 누르면 전체글 새로고침됨

마찬가지로 개념글일때 개념글 버튼 누르면 개념글 새로고침됨

새로고침 할려고 버튼 나눈거임


하 근데 최신순(시계모양) 버튼이 버튼 오른쪽에서 왼쪽으로 가버림.. 이건 못고치겟서


1

게시판 하단에 있던 버튼도 바뀝니다


1
1

확장프로그램 템퍼몽키 설치하시고 새 스크립트 만들기 > 안에 내용 지우고 스크립트 복붙 > 저장




아래는 스크립트 코드

// ==UserScript==
// @name         kone.gg 개념글/전체글 버튼 삽입(수정판)
// @namespace    http://tampermonkey.net/
// @version      2.4
// @description  게시판 개념글/전체글 버튼 삽입 수정
// @match        https://kone.gg/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    let lastUrl = location.href;

    const createButton = (text, onClick, isActive) => {
        const button = document.createElement('button');
        button.textContent = text;
        button.style.cssText = `
            margin-right: 8px;
            padding: 6px 12px;
            border: none;
            border-radius: 9999px;
            font-size: 14px;
            cursor: pointer;
            background-color: ${isActive ? '#dc2626' : '#e4e4e7'};
            color: ${isActive ? 'white' : '#27272a'};
        `;
        button.addEventListener('click', onClick);
        return button;
    };

    const insertButtons = () => {
        const url = location.href;
        const isHot = url.includes('mode=hot');
        const basePath = location.pathname;

        const boardWrapper = document.querySelector('div.grow.flex.flex-col.rounded-b-lg');
        if (!boardWrapper) return;

        const buttonRows = boardWrapper.querySelectorAll('div.flex.items-center.gap-2');
        if (!buttonRows.length) return;

        buttonRows.forEach((targetRow) => {
            if (targetRow.querySelector('a[href*="write"]')) return;
            if (targetRow.querySelector('#custom-btn-hot') || targetRow.querySelector('#custom-btn-all')) return;

            // 기존 개념글/전체글 a 링크 삭제
            targetRow.querySelectorAll('a[href]').forEach(link => {
                const href = link.getAttribute('href');
                if (href.includes('mode=hot') || href === basePath) {
                    link.remove();
                }
            });

            const hotBtn = createButton('개념글', () => {
                window.location.href = basePath + '?mode=hot';
            }, isHot);
            hotBtn.id = 'custom-btn-hot';

            const allBtn = createButton('전체글', () => {
                window.location.href = basePath;
            }, !isHot);
            allBtn.id = 'custom-btn-all';

            targetRow.appendChild(allBtn);
            targetRow.appendChild(hotBtn);
        });
    };

    // 버튼 삽입 및 재삽입 시도
    const tryInsertButtons = () => {
        insertButtons();
    };

    // history API 훅 감싸기
    const hookHistoryMethod = (method) => {
        const original = history[method];
        return function () {
            const result = original.apply(this, arguments);
            window.dispatchEvent(new Event('locationchange'));
            return result;
        };
    };
    history.pushState = hookHistoryMethod('pushState');
    history.replaceState = hookHistoryMethod('replaceState');

    window.addEventListener('popstate', () => window.dispatchEvent(new Event('locationchange')));
    window.addEventListener('locationchange', () => {
        if (lastUrl !== location.href) {
            lastUrl = location.href;
            tryInsertButtons();
        }
    });

    // DOM 변경 감지해서도 버튼 갱신 (최상위 body 감시)
    const observer = new MutationObserver(() => {
        tryInsertButtons();
    });
    observer.observe(document.body, { childList: true, subtree: true });

    // 최초 실행 딜레이 줘서 기다렸다 삽입
    setTimeout(() => {
        tryInsertButtons();
    }, 1000);

})();
3
2 comments
아 근데 지금 해보니까 게시판에 들어와서 새로고침을 한번 해줘야 버튼이 바뀝니다;; 참고해주세용
ㄴ수정했습니다 혹시 처음에 받으신 분 있으시면 다시 써주세용
[직번][sanatuki]개변태아이돌♥ 에로에로세뇌라이브시작이야♥
동인
돋돋돋돋돋
05/10 24012 90
[업로드 갱신안내] [PC-모바일-Linux-macOS] [공식한글]-존재감 없는 여동생과의 소박한 일상 1.02
번역
Ghost
05/10 35357 82
[복구] 복구된지 오래된 용량 적은 게임 5개
복구
몬스터가아니다신이다
05/10 34954 81
[AI번역+검수] 후타) [Fence 14]자지가 생겨버린 우등생짱
동인
vereeeev
05/10 31564 183
버) RVNWaWRlb01ha2Vy 2026.02~04
영상
xjabdks
05/10 31837 139
[Minamihama Yoriko] 교배 라이선스 ~인기 없는 내가 최강 유전자?!~
동인
1uF
05/10 30248 185
[Itohana] 건방진 소꿉친구가 나를 빼앗으러 오는 승리 √
동인
1uF
05/10 32984 136
26.05.12, 90일) 1-2. RJ310786 ReBF v2.0. 개선 26.05.12.7z
복구
ㅇㅇ
05/10 18480 60
[Takeda Aranobu] 치처녀 풍기위원의 모두에게 말할수없는 음미한 부탁 9
동인
1uF
05/10 16670 55
[mahouya] 패배 엔드에서 레오나 공주가 범해지는 이야기
동인
고전발굴
05/10 20304 24
[후타주의] 후원보급,Br@n) 네로짱 + 통합편집
영상
비밀봉투
05/10 19338 77
[さるら] 축제에서 의상이 풀려버리는 만화
동인
bender
05/10 16594 42
[직번] [armadillo daiji] 갸루 모녀의 돈버는 방법2
동인
maha1004
05/10 35744 165
Nⓐjⓐr 41개 모음
영상
darkunicorn
05/10 22221 96
[구매보급][한국어자막판] 거유 메스○키 마왕님과 마족 메이드장이 더러운 자○에 아양 떨며 봉사하게 되는 이야기♪
소리
이름뭐하지
05/10 19804 68
[버전업알림] 교칙은 절대적이다
번역
rack11
05/10 40638 73
Br@n)벽람항로 임플래커블 + 통합편집
영상
비밀봉투
05/10 15802 80
[구매보급/미번/이종간/촉수] 서큐버스 헤븐
미번
루파조아
05/10 21412 32
AI, 셀레스포니아) 마카이 지구의 주민
야짤
miso5
05/10 11281 101
에바네시아 (스타레일)
영상
브레머튼
05/10 22020 101
[번역요청] Abyss Of Pleasure 0.2.6
미번
0000p
05/10 15863 48
AI) 무인도 사원 여행기 시즈하 첫H장면
야짤
zerocoke
05/10 8291 33
[구매보급/공식번역] RJ01567096 교칙은 절대적이다
번역
rack11
05/10 52690 183
[구매보급] RJ01605925 고대의 기사와 제물의 무녀 26.05.10
미번
gkqisq
05/10 15779 74
후원보급,Br@n)버튜버 시온,보탄 + 통합편집
영상
비밀봉투
05/10 22177 86
도트/움짤 교배 프레스
야짤
angkimozzi
05/10 19329 45
[구매보급] [버전업] RJ01582213 라스티 던전 2 ver1.0?? 26.05.10
미번
gkqisq
05/10 9621 51
[aI번역-노모] 거유 여성이 둘 없으면 발기하지 못하는 남편을 위해 친구를 데려온 아내 -총집편
동인
mybest
05/10 30750 125
미번) 할 수 있는 후배 아오이 짱! ~2인 동거 시작해버렸습니다~ (できる後輩アオイちゃん! ~二人ぐらし始まっちゃいました~)
미번
darkunicorn
05/10 12266 33
미번) 나츠이로 레슨 v1.1.0b (なついろレッスン~the last summer time)
미번
darkunicorn
05/10 15639 25