DeepSeek No Auto-Scroll

Block auto-scroll in DeepSeek while keeping manual scroll control

2025-05-14 기준 버전입니다. 최신 버전을 확인하세요.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         DeepSeek No Auto-Scroll
// @description  Block auto-scroll in DeepSeek while keeping manual scroll control
// @match        *://*.deepseek.com/*
// @version 0.0.1.20250514120806
// @namespace https://greasyfork.org/users/1435046
// ==/UserScript==

(function() {
    'use strict';

    // Function to apply the scroll behavior override
    function applyNoAutoScroll(scrollContainer) {
        // Block auto-scroll attempts while keeping manual control
        Object.defineProperty(scrollContainer, 'scrollTop', {
            set: function() {}, // Empty setter blocks programmatic scroll
            get: () => scrollContainer._realScrollTop || 0, // Preserve actual position
            configurable: true
        });

        // Store real scroll position
        scrollContainer.addEventListener('scroll', () => {
            scrollContainer._realScrollTop = scrollContainer.scrollTop;
        });
    }

    // Watch for the target element using MutationObserver
    const observer = new MutationObserver(() => {
        const scrollContainer = document.querySelector('div.scrollable');
        if (scrollContainer) {
            observer.disconnect(); // Stop observing once the element is found
            applyNoAutoScroll(scrollContainer);
        }
    });

    // Start observing the DOM for changes
    observer.observe(document.body, { childList: true, subtree: true });
})();