kone
소미소프트

소미소프트

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

05/27/2025, 09:41:09
유틸
2890 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
아 근데 지금 해보니까 게시판에 들어와서 새로고침을 한번 해줘야 버튼이 바뀝니다;; 참고해주세용
ㄴ수정했습니다 혹시 처음에 받으신 분 있으시면 다시 써주세용
orgy dice 작업근황
정보
돔마
04/27 13823 17
AI/청아) 임산부 스웨터
야짤
날개 로봇
04/27 6057 18
얼탱이가 없네 ㅋㅋㅋㅋㅋㅋㅋ
야짤
sesv3030
04/27 23619 57
[미번/번역요청] 선생님과 의붓어머니와 연인의 얼굴 2 의붓 조모 미조구치 아오이편
동인
kosmof
04/27 16903 16
(이종간) [자체한글,구매보급] 이세계 비스트로
번역
ArIso
04/27 62327 228
[기계번역](청아)(ntr) NTR에 능숙한 타카기씨 풀 데이트 편
동인
sssddss
04/27 33855 65
[アブジャン] 타카기 양과 오빠의 추억 앨범 (자막없음)
영상
aisha
04/27 27504 119
cm9pcm9pbW1k, TU1EdHlwZTg3 모음집 업데이트 알림
영상
hannanas
04/27 30457 53
AI, 셀레스포니아) 덕트 함정
야짤
miso5
04/27 16331 111
[AI] 도로롱
야짤
kifbodo245
04/27 16072 24
bWkgcG8geg== 신작
영상
ㅇㅇ
04/27 50144 276
(이종간, 료나, 촉수, 난자포식) 암꽃탐충 오구페스카 -전편-
동인
snsyah00
04/27 35842 150
RJ01045491 최면의 공주기사 v1.092 (26.03.31) Uncen
복구
ㅇㅇ
04/27 37099 108
[구매보급/최면음성] RJ074283 레○프・사운드・걸♪ (내 첫 동인음성)
소리
summer4552
04/27 10140 44
[Shirabe Shiki] 대음마전에 있어서 감각 차단 부적은 필수 대비책입니다 ①
동인
티모
04/27 53012 327
호시노 (블아)
영상
브레머튼
04/27 18286 85
제품 코드 추출기, 제품 코드 중복 찾기
유틸
ㅇㅇ
04/27 8548 18
나츠노 사가시모노 RJ370402 회상 save
세이브
sadwdas
04/27 12149 17
펌,다테로쿠) 아내와 의붓자식이 같은 사람(나)을 좋아하게 되는 것은 유전자적으로 당연!2
동인
kjalar
04/27 18695 61
[복구][4K,1080] bbc ep19+20, ep21+22 (eWV5ZWJpcmRpZQ==)
영상
jaennab
04/27 28513 111
[노모화완료] [Dozamura] 돌보기 좋아하는 엄마, 아들한테 박혀버리다
동인
lliililiiii
04/27 27049 94
[노모화완료] [yomoda yomo] 고학력(인텔리) 유부녀 아마미야 토코 준교수(선생님)의 발정 _안경있음
동인
lliililiiii
04/27 35880 104
AI, 블아) 매지컬 스즈미
야짤
miso5
04/27 8230 41
airandou 여동생을 임신시키지 못하면 나갈 수 없는 섬 2편
동인
posan
04/27 35134 210
바니걸 키아라
야짤
Ghost
04/27 15825 63
[후타] 비비안 & 벨 (ZZZ) 파트 1
영상
브레머튼
04/27 21092 82
음최도시 힙노즘 (제목이 맞나 모르겠음) 28일 자정에 발매할듯
정보
wouwouer
04/27 13438 18
[4K60FPS] Custom Udon 노모 (LADA)
영상
쿠지락스
04/27 41388 232
[kakao/노모] 연인☆놀이
동인
ㅇㅇ
04/27 25991 85
업뎃)철부지 고양이 에르샤 ver.1.03
미번
쩝냡
04/27 13700 55