Scroll Position Saver

Save scroll position in session cookies (clears on browser exit)

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey, Greasemonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

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

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey किंवा Violentmonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

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

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला Tampermonkey यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्क्रिप्ट व्यवस्थापक एक्स्टेंशन इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्क्रिप्ट व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला Stylus सारखे एक्स्टेंशन इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

ही स्टाईल इंस्टॉल करण्यासाठी तुम्हाला एक युझर स्टाईल व्यवस्थापक इंस्टॉल करावे लागेल.

(माझ्याकडे आधीच युझर स्टाईल व्यवस्थापक आहे, मला इंस्टॉल करू द्या!)

// ==UserScript==
// @name         Scroll Position Saver
// @namespace    http://greasyfork.org/
// @version      1.1
// @description  Save scroll position in session cookies (clears on browser exit)
// @author       Bui Quoc Dung
// @match        *://*/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    const storageKey = 'scrollPosition_' + window.location.href;

    const savePosition = function() {
        try {
            const scrollData = {
                horizontalCoordinate: window.scrollX,
                verticalCoordinate: window.scrollY
            };
            sessionStorage.setItem(storageKey, JSON.stringify(scrollData));
        } catch (error) {}
    };

    const restorePosition = function() {
        try {
            const savedScrollPosition = sessionStorage.getItem(storageKey);
            if (savedScrollPosition) {
                const parsedPositionData = JSON.parse(savedScrollPosition);
                const horizontalCoordinate = parsedPositionData.horizontalCoordinate;
                const verticalCoordinate = parsedPositionData.verticalCoordinate;

                window.scrollTo(horizontalCoordinate, verticalCoordinate);

                window.addEventListener('load', function() {
                    window.scrollTo(horizontalCoordinate, verticalCoordinate);
                }, {
                    once: true
                });
            }
        } catch (error) {}
    };

    restorePosition();

    let scrollTimeoutTimer;

    window.addEventListener('scroll', function() {
        clearTimeout(scrollTimeoutTimer);
        scrollTimeoutTimer = setTimeout(savePosition, 3000);
    }, {
        passive: true
    });

    window.addEventListener('beforeunload', savePosition);
})();