Universal Safe Search Enforcer

Force safe search on multiple search engines globally

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name         Universal Safe Search Enforcer
// @namespace    http://tampermonkey.net/
// @version      1.8
// @description  Force safe search on multiple search engines globally
// @author       HangTuahMalayWarriorSaiyaPeople
// @license MIT
// @match        *://*/*
// @run-at       document-start
// @grant        none
// ==/UserScript==
// https://github.com/hangtuahmalaywarrior

(function() {
    'use strict';

    // Function to add safe search parameters to URLs
    function enforceSafeSearch(url) {
        try {
            const urlObj = new URL(url);
            const hostname = urlObj.hostname;
            const params = urlObj.searchParams;
            let modified = false;

            // Yandex and all subdomains
            if (/yandex\.(com|ru|ua|by|kz|az|ee|lt|lv|md|tj|tm|uz|fr|de|it|tr|co\.\w+)/i.test(hostname)) {
                if (urlObj.pathname.includes('/search')) {
                    params.set('family', 'yes'); // Yandex safe search
                    modified = true;
                }
            }
            // Bing
            else if (/bing\.com$/i.test(hostname)) {
                params.set('adlt', 'strict');
                modified = true;
            }
            // DuckDuckGo
            else if (/duckduckgo\.com$/i.test(hostname) || /ddg\.gg$/i.test(hostname)) {
                params.set('kp', '1'); // kp=1 is strict safe search
                modified = true;
            }
            // Yahoo
            else if (/search\.yahoo\.com$/i.test(hostname)) {
                params.set('vm', 'p'); // p = strict safe search
                modified = true;
            }
          else if (/ya\.ru$/i.test(hostname)) {
                params.set('family', 'yes');
                modified = true;
            }
            /// Additional search engines can be added here

  const currentUrl = window.location.href;
    
    // Check if URL contains "qwant" and has a search query (?q=)
    if ((currentUrl.includes('qwant.com') && currentUrl.includes('?q=') || (currentUrl.includes('www.qwant.com')) )&& !currentUrl.includes('qwantjunior')) {
        // Replace qwant.com with qwantjunior.com
        const newUrl = currentUrl.replace(/qwant\.com/g, 'qwantjunior.com');
        
        // Redirect to Brave safe
        window.location.replace(newUrl);
    } else if((currentUrl.includes('search.brave.com'))&& !currentUrl.includes('safe.search.brave.com')) {
        // Replace 
        const newUrl = currentUrl.replace(/search.brave.com/g, 'safe.search.brave.com');
        
        // Redirect
        window.location.replace(newUrl);
    } 
else if((currentUrl.includes('www.startpage.com')) && !currentUrl.includes('safe.startpage.com')) {
        // Replace 
        const newUrl = currentUrl.replace(/www.startpage.com/g, 'safe.startpage.com');
        
        // Redirect
        window.location.replace(newUrl);
    } 
/// End additional search engines


            if (modified) {
                urlObj.search = params.toString();
                return urlObj.toString();
            }
        } catch (e) {
            console.error('Safe Search Enforcer error:', e);
        }
        return url;
    }

    // Intercept navigation
    (function(history) {
        const pushState = history.pushState;
        const replaceState = history.replaceState;

        history.pushState = function(state, title, url) {
            if (url) {
                url = enforceSafeSearch(url.toString());
            }
            return pushState.apply(history, [state, title, url]);
        };

        history.replaceState = function(state, title, url) {
            if (url) {
                url = enforceSafeSearch(url.toString());
            }
            return replaceState.apply(history, [state, title, url]);
        };
    })(window.history);

    // Handle link clicks
    document.addEventListener('click', function(e) {
        let target = e.target;
        while (target && target.tagName !== 'A') {
            target = target.parentElement;
        }
        
        if (target && target.href) {
            const originalHref = target.href;
            const newHref = enforceSafeSearch(originalHref);
            
            if (newHref !== originalHref) {
                e.preventDefault();
                window.location.href = newHref;
            }
        }
    }, true);

    // Handle form submissions
    document.addEventListener('submit', function(e) {
        if (e.target.tagName === 'FORM' && e.target.method.toLowerCase() === 'get') {
            const form = e.target;
            const action = form.getAttribute('action');
            
            if (action) {
                const newAction = enforceSafeSearch(action);
                if (newAction !== action) {
                    form.setAttribute('action', newAction);
                }
            }
        }
    }, true);

    // Check current URL and redirect if needed
    function checkCurrentUrl() {
        const currentUrl = window.location.href;
        const newUrl = enforceSafeSearch(currentUrl);
        
        if (newUrl !== currentUrl && !window.location.href.includes('safe=already')) {
            window.location.replace(newUrl);
        }
    }

    // Run on page load
    window.addEventListener('load', checkCurrentUrl);
    window.addEventListener('popstate', checkCurrentUrl);

    // Also run immediately
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', checkCurrentUrl);
    } else {
        checkCurrentUrl();
    }

    // Set safe search cookies for supported sites
    function setCookies() {
        const hostname = window.location.hostname;
        
        // Yandex cookies
        if (/yandex\./i.test(hostname)) {
            document.cookie = 'yandex_login=; path=/; max-age=31536000';
            document.cookie = 'yandexuid=; path=/; max-age=31536000';
            // Yandex safe search preference
            document.cookie = 'yandex_search_safe=1; path=/; max-age=31536000';
        }
        
        // Bing cookies
        if (/bing\.com$/i.test(hostname)) {
            document.cookie = 'SRCHHPGUSR=ADLT=STRICT; path=/; max-age=31536000';
        }
    }

    // Run cookie setting
    setCookies();
        
    
    
    
})();