Backspace to Go Back

Go back to the previous page using the backspace key

Bu betiği kurabilmeniz için Tampermonkey, Greasemonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği yüklemek için Tampermonkey gibi bir uzantı yüklemeniz gerekir.

Bu betiği kurabilmeniz için Tampermonkey ya da Violentmonkey gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği kurabilmeniz için Tampermonkey ya da Userscripts gibi bir kullanıcı betiği eklentisini kurmanız gerekmektedir.

Bu betiği indirebilmeniz için ayrıca Tampermonkey gibi bir eklenti kurmanız gerekmektedir.

Bu komut dosyasını yüklemek için bir kullanıcı komut dosyası yöneticisi uzantısı yüklemeniz gerekecek.

(Zaten bir kullanıcı komut dosyası yöneticim var, kurmama izin verin!)

Bu stili yüklemek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için Stylus gibi bir uzantı kurmanız gerekir.

Bu stili yükleyebilmek için Stylus gibi bir uzantı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

Bu stili yüklemek için bir kullanıcı stili yöneticisi uzantısı kurmanız gerekir.

Bu stili yükleyebilmek için bir kullanıcı stili yöneticisi uzantısı yüklemeniz gerekir.

(Zateb bir user-style yöneticim var, yükleyeyim!)

// ==UserScript==
// @name         Backspace to Go Back
// @namespace    gobackxFIRKx
// @description  Go back to the previous page using the backspace key
// @version      1.03
// @author       xFIRKx
// @match        *://*/*
// @grant        none
// @homepageURL  https://greasyfork.org/it/scripts/495770-backspace-to-go-back
// ==/UserScript==

(function() {
    'use strict';

    function handleKeydown(event) {
        // Check if the pressed key is the backspace key
        if ((event.key === 'Backspace' || event.keyCode === 8) && !event.defaultPrevented) {
            // Check if the focus is not on an editable element
            const activeElement = document.activeElement;
            const isInput = activeElement.tagName === 'INPUT' || activeElement.tagName === 'TEXTAREA' || activeElement.isContentEditable;
            const isReadOnly = activeElement.readOnly || activeElement.disabled;

            if (!isInput || isReadOnly) {
                event.preventDefault(); // Prevent the default action
                window.history.back(); // Go back to the previous page
            }
        }
    }

    // Add event listener for keydown events
    document.addEventListener('keydown', handleKeydown, true); // Use capture mode to ensure the event is caught early

    // Use MutationObserver to handle dynamic content changes
    const observer = new MutationObserver(() => {
        // Reattach the event listener if necessary
        document.removeEventListener('keydown', handleKeydown, true);
        document.addEventListener('keydown', handleKeydown, true);
    });

    // Observe changes in the document body
    observer.observe(document.body, { childList: true, subtree: true });

    // Additional observer for YouTube's specific dynamic content
    if (window.location.hostname.includes('youtube.com')) {
        const ytObserver = new MutationObserver(() => {
            const contentElement = document.querySelector('ytd-app');
            if (contentElement) {
                ytObserver.observe(contentElement, { childList: true, subtree: true });
            }
        });

        ytObserver.observe(document.body, { childList: true, subtree: true });
    }
})();