您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace Gulf of Mexico with Mauricio Garcés using overlays
// ==UserScript== // @name Google Maps Gulf Renamer // @namespace http://tampermonkey.net/ // @version 2.0 // @license MIT // @description Replace Gulf of Mexico with Mauricio Garcés using overlays // @author Edu Altamirano (www.cocoalopez.com) // @match https://www.google.com/maps/* // @match https://www.google.*/maps/* // @grant GM_addStyle // @run-at document-start // ==/UserScript== (function() { 'use strict'; // Define styles for our overlay GM_addStyle(` .gulf-overlay { position: absolute; z-index: 1000; background: #78d5e9; padding: 8px 10px; border-radius: 4px; pointer-events: none; user-select: none; font-family: Roboto, Arial, sans-serif; font-size: 13px; color: #0d7c93; white-space: nowrap; } .gulf-overlay-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; pointer-events: none; z-index: 999; } `); // Replace text in DOM function replaceGulfText() { const textNodes = document.evaluate( "//text()[contains(., 'Gulf of Mexico')]", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null ); for (let i = 0; i < textNodes.snapshotLength; i++) { const node = textNodes.snapshotItem(i); node.textContent = node.textContent.replace(/Gulf of Mexico/g, 'Mauricio Garcés'); } // Handle search box const searchBox = document.getElementById('searchboxinput'); if (searchBox && searchBox.value.includes('Gulf of Mexico')) { searchBox.value = searchBox.value.replace(/Gulf of Mexico/g, 'Mauricio Garcés'); } } // Create and position overlay function createOverlay() { const mapElement = document.querySelector('#scene'); if (!mapElement) return; // Remove any existing overlay const existingContainer = document.querySelector('.gulf-overlay-container'); if (existingContainer) { existingContainer.remove(); } // Create container const container = document.createElement('div'); container.className = 'gulf-overlay-container'; mapElement.appendChild(container); // Create label const label = document.createElement('div'); label.className = 'gulf-overlay'; label.textContent = 'Mauricio Garcés'; container.appendChild(label); // Position the label (adjust these values as needed) label.style.position = 'absolute'; label.style.left = '66%'; label.style.top = '45.5%'; // Update position on map changes function updatePosition() { const zoom = window.google?.maps?.getZoom?.() || 5; const baseSize = 13; // Base font size label.style.fontSize = `${baseSize * (zoom / 5)}px`; } // Observe map changes const observer = new MutationObserver(updatePosition); observer.observe(mapElement, { attributes: true, childList: true, subtree: true }); // Handle window resize window.addEventListener('resize', updatePosition); // Initial position update updatePosition(); } // Initialize everything function initialize() { replaceGulfText(); createOverlay(); // Create observer for dynamic content const observer = new MutationObserver((mutations) => { replaceGulfText(); }); // Start observing observer.observe(document.body, { childList: true, subtree: true, characterData: true }); } // Run when map is ready if (document.readyState === 'complete') { setTimeout(initialize, 2000); } else { window.addEventListener('load', () => { setTimeout(initialize, 2000); }); } // Handle URL changes (for single-page app navigation) let lastUrl = location.href; new MutationObserver(() => { const url = location.href; if (url !== lastUrl) { lastUrl = url; setTimeout(initialize, 1000); } }).observe(document, { subtree: true, childList: true }); })();