Greasy Fork is available in English.

Genius.com Back Button Fix

Stops Genius from hijacking your back button when clicking lyrics.

ही स्क्रिप्ट इंस्टॉल करण्यासाठी तुम्हाला 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 यासारखे एक्स्टेंशन इंस्टॉल करावे लागेल..

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

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

Advertisement:

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

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

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

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

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

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

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

Advertisement:

// ==UserScript==
// @name         Genius.com Back Button Fix
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  Stops Genius from hijacking your back button when clicking lyrics.
// @author       qualia
// @match        *://genius.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=genius.com
// @grant        none
// @license      MIT
// @run-at       document-start
// ==/UserScript==

(function() {
    'use strict';

    const originalPushState = history.pushState;
    const originalReplaceState = history.replaceState;

    function getCleanUrl(urlStr) {
        if (!urlStr) return urlStr;
        try {
            const urlObj = new URL(urlStr, window.location.origin);
            if (urlObj.searchParams.has('referent_id') || urlObj.hash.includes('note-')) {
                urlObj.searchParams.delete('referent_id');
                urlObj.hash = '';
                return urlObj.pathname + urlObj.search + urlObj.hash;
            }
            return urlStr;
        } catch (e) {
            return urlStr;
        }
    }

    history.pushState = function(state, title, url) {
        const cleanUrl = getCleanUrl(url);
        return originalReplaceState.call(this, state, title, cleanUrl);
    };

    history.replaceState = function(state, title, url) {
        const cleanUrl = getCleanUrl(url);
        return originalReplaceState.call(this, state, title, cleanUrl);
    };
})();