// ==UserScript== // @name Google Search Correction Fix // @namespace http://tampermonkey.net/ // @version 1.0 // @description Fix Google search bar reverting to incorrect spelling after correction // @author Satoko // @license MIT // @match https://www.google.com/search?* // @match https://www.google.ru/search?* // @match https://www.google.com.ua/search?* // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; console.log('Google Search Correction Fix loaded'); function fixCorrectionLinks() { const correctionLinks = document.querySelectorAll('a[href*="spell=1"], a[href*="correction"], .gL9Hy, .gNG8Bc, a[jsname*="spell"]'); correctionLinks.forEach(link => { if (link.hasAttribute('data-fixed')) return; link.setAttribute('data-fixed', 'true'); const originalHref = link.href; link.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); console.log('Intercepted correction click, redirecting to:', originalHref); window.location.href = originalHref; }); }); } function fixDidYouMean() { const didYouMeanElements = document.querySelectorAll('#fprs a, .aCOpRe em, .MUxGbd, .gqFSUc'); didYouMeanElements.forEach(element => { if (element.hasAttribute('data-fixed')) return; const link = element.closest('a') || element; if (link.href && link.href.includes('google.com/search')) { link.setAttribute('data-fixed', 'true'); link.addEventListener('click', function(e) { if (this.href && this.href !== window.location.href) { e.preventDefault(); e.stopPropagation(); console.log('Intercepted "Did you mean" click'); window.location.href = this.href; } }); } }); } function fixSearchBox() { const searchBox = document.querySelector('input[name="q"]'); if (searchBox) { const urlParams = new URLSearchParams(window.location.search); const urlQuery = urlParams.get('q'); if (urlQuery && searchBox.value !== urlQuery) { if (!searchBox.value.includes(urlQuery) && urlQuery.includes(searchBox.value)) { const newUrl = new URL(window.location.href); newUrl.searchParams.set('q', searchBox.value); window.history.replaceState(null, '', newUrl.toString()); console.log('Fixed URL to match search box:', searchBox.value); } } } } function runAllFixes() { fixCorrectionLinks(); fixDidYouMean(); fixSearchBox(); } runAllFixes(); const observer = new MutationObserver(function(mutations) { let shouldRun = false; mutations.forEach(function(mutation) { if (mutation.addedNodes.length) { shouldRun = true; } }); if (shouldRun) { setTimeout(runAllFixes, 100); } }); observer.observe(document.body, { childList: true, subtree: true }); setInterval(runAllFixes, 2000); })();