kone
소미소프트

소미소프트

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

05/27/2025, 09:41:09
유틸
2909 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
아 근데 지금 해보니까 게시판에 들어와서 새로고침을 한번 해줘야 버튼이 바뀝니다;; 참고해주세용
ㄴ수정했습니다 혹시 처음에 받으신 분 있으시면 다시 써주세용
요몽원 완전 공략 가이드
후기 및 공략
losress
05/15 26786 151
[구매보급]도스케베 토끼 공주에게 왕으로 소환되었습니다♪ ~우아한 씨받이 라이프
소리
이름뭐하지
05/15 13696 62
3Mura 0515
영상
참새
05/15 20717 89
cm9pcm9pbW1k 모음집 업데이트 알림
영상
hannanas
05/15 20841 52
직번)[kotorakku]너무 선생님을 괴롭히지 말아주세요 ~동안에 거유에 상냥한 하나사키 선생님의 마음이 부서진 날~
동인
woo15
05/15 29114 130
[구매보급]【한국어 자막판】동거 여친.
소리
뒷담난쟁이로야족
05/15 12323 79
[구매보급] [버전업] RJ01548918 포스트 블러섬 -꽃이 피는 라이히와 사랑의 여제- 26.05.15 ver 1.3.1
미번
gkqisq
05/15 12084 39
AI, 짧) 오늘은 일이 빨리 끝나 집에 빨리 돌아온 엄마, 셀레스포니아 한장도 투척
야짤
miso5
05/15 16563 60
치사 (명조)
영상
mollange
05/15 21931 117
[구매보급][번역요청]앤젤만주사 게임 5종 번역 부탁드립니다
미번
axxxza
05/15 8472 32
[atori_k] 첫 담임 1+2
동인
agnet666
05/15 27340 34
[ai번역](방뇨,백합) RJ01392095 어린 레몬과 어른의 바닐라
번역
lavia
05/15 28145 103
[요청복구] RJ01317225 언베일드 ~ 명탐정 샬롯과 피에 젖은 살인마(Ripper)
복구
절대불멸
05/15 23938 55
[요청복구]RJ105442 암즈디바이서 arms devicer 1.4 kr
복구
절대불멸
05/15 15700 35
[요청복구] RJ01502625 LEWD GOD ~음신에게 바치는 제물~
복구
절대불멸
05/15 18065 44
[ 미번 / 번역요청 ] 숨겨진 사연이 있는 엑소시스트와 환생악마의 치명적인 사랑
동인
Lilac
05/15 10704 20
ai)원신 스커크선생님 2 bonus
야짤
ezmood
05/15 9857 49
직번) [Yamamoto Zenzen] 학원원교일기 Comix 1화
동인
qlalfsla
05/15 18011 117
[あすとら] 치명적인 오류
야짤
edo
05/15 13350 31
[청아] 노르마 (ZZZ)
영상
브레머튼
05/15 25913 109
AI,셀레스포니아) 우자 선생님의 지도
야짤
miso5
05/15 17597 142
[RPG Maker MV/MZ 실시간 번역기] 4.0 출시
유틸
mrpls
05/15 22718 70
[요청복구] Jack-o-nine-tails 2.2.3 (한글판) 사서고생하기 UI
복구
negativ
05/15 21911 48
[복구] 타락전기 벨페고르 사가
복구
스삐키뚜땨
05/15 23266 57
ai번역 손식질) 비선실세 학생 나 몰래 두사람이 즐기는 수학여행
동인
1Q2W3E4R
05/15 24879 119
(블루아카) [Itsuki Keisei (傾世遊庵)] 진 만큼 몸으로 갚을게요♡~여사장 AV 데뷔
영상
akihamoe
05/15 23617 109
NTR남의 속성(외모)로 보는 야겜 이야기
후기 및 공략
drogba
05/15 13231 38
[요청복구] 토미에는 결혼하고 싶어(Tomie wants to get married v1.3801)
복구
lilyll
05/15 25915 60
펌,레구라신작) 편협의 쪽빛
동인
kjalar
05/15 19351 134
[개조 버전] 프레이 게임 RJ341167
복구
V
05/15 19280 66