您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Añade un botón flotante para ir al primer prompt en AI Studio
当前为
// ==UserScript== // @name AI Studio - Ir al primer prompt de un chat // @name:en AI Studio - Go to the first prompt // @namespace http://tampermonkey.net/ // @version 1.0 // @description Añade un botón flotante para ir al primer prompt en AI Studio // @description:en Adds a floating button to go to the first prompt in AI Studio. // @author BambuSergio // @match https://aistudio.google.com/app/prompts/* // @match https://aistudio.google.com/prompts/* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Función para encontrar el contenedor principal de scroll function findScrollContainer() { // Priorizar contenedores específicos de AI Studio const prioritySelectors = [ '.chat-view-container', '.chat-container', '.layout-main', 'div[class*="chat-view-container"]', 'div[class*="layout-main"]' ]; for (let selector of prioritySelectors) { const container = document.querySelector(selector); if (container) { console.log('Contenedor de scroll encontrado:', selector, container); return container; } } return null; } // Función para hacer scroll al inicio function scrollToTop() { console.log('Iniciando scroll al inicio...'); // Método 1: Buscar el contenedor específico de AI Studio const chatContainer = findScrollContainer(); if (chatContainer) { console.log('Haciendo scroll en contenedor específico:', chatContainer); chatContainer.scrollTo({ top: 0, behavior: 'smooth' }); chatContainer.scrollTop = 0; } // Método 2: Scroll en window y document window.scrollTo({ top: 0, behavior: 'smooth' }); document.documentElement.scrollTo({ top: 0, behavior: 'smooth' }); document.body.scrollTo({ top: 0, behavior: 'smooth' }); // Método 3: Asegurar scroll directo setTimeout(() => { window.scrollTo(0, 0); document.documentElement.scrollTop = 0; document.body.scrollTop = 0; if (chatContainer) { chatContainer.scrollTop = 0; } }, 100); // Método 4: Intentar con todos los contenedores scrollables const scrollableElements = document.querySelectorAll('*'); scrollableElements.forEach(el => { if (el.scrollHeight > el.clientHeight || el.scrollWidth > el.clientWidth) { if (el.scrollTop > 0) { console.log('Scroll detectado en:', el); el.scrollTop = 0; } } }); // Método 5: Simular Ctrl+Home setTimeout(() => { document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', keyCode: 36, ctrlKey: true, bubbles: true, cancelable: true })); }, 200); console.log('Todos los métodos de scroll aplicados'); } // Función para crear el botón flotante function createFloatingButton() { const button = document.createElement('button'); button.innerHTML = '↑ Inicio'; button.style.cssText = ` position: fixed; bottom: 80px; right: 20px; z-index: 99999; background: #1976d2; color: white; border: none; border-radius: 25px; padding: 12px 16px; font-size: 14px; font-weight: bold; cursor: pointer; box-shadow: 0 4px 12px rgba(0,0,0,0.3); transition: all 0.3s ease; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; backdrop-filter: blur(10px); `; // Efectos hover button.addEventListener('mouseenter', function() { this.style.transform = 'scale(1.05)'; this.style.backgroundColor = '#1565c0'; }); button.addEventListener('mouseleave', function() { this.style.transform = 'scale(1)'; this.style.backgroundColor = '#1976d2'; }); // Funcionalidad del botón button.addEventListener('click', function() { console.log('Botón pulsado - iniciando scroll'); scrollToTop(); // Feedback visual this.innerHTML = '✓ ¡Arriba!'; this.style.backgroundColor = '#4caf50'; setTimeout(() => { this.innerHTML = '↑ Inicio'; this.style.backgroundColor = '#1976d2'; }, 1500); }); return button; } // Función para detectar si hay scroll disponible function hasScrollableContent() { const body = document.body; const html = document.documentElement; const chatContainer = findScrollContainer(); const bodyHasScroll = body.scrollHeight > body.clientHeight; const htmlHasScroll = html.scrollHeight > html.clientHeight; const chatHasScroll = chatContainer ? chatContainer.scrollHeight > chatContainer.clientHeight : false; const windowHasScroll = window.scrollY > 0; return bodyHasScroll || htmlHasScroll || chatHasScroll || windowHasScroll; } // Función para mostrar/ocultar el botón function toggleButtonVisibility(button) { const scrollTop = Math.max( window.pageYOffset, document.documentElement.scrollTop, document.body.scrollTop ); const chatContainer = findScrollContainer(); const chatScrollTop = chatContainer ? chatContainer.scrollTop : 0; const shouldShow = scrollTop > 100 || chatScrollTop > 100 || hasScrollableContent(); if (shouldShow) { button.style.opacity = '1'; button.style.pointerEvents = 'auto'; button.style.display = 'block'; } else { button.style.opacity = '0.5'; button.style.pointerEvents = 'auto'; } } // Función de observación mejorada function observeScrollChanges(button) { // Observar cambios en el scroll const checkScroll = () => toggleButtonVisibility(button); window.addEventListener('scroll', checkScroll, { passive: true }); document.addEventListener('scroll', checkScroll, { passive: true }); // Observar cambios en contenedores específicos const chatContainer = findScrollContainer(); if (chatContainer) { chatContainer.addEventListener('scroll', checkScroll, { passive: true }); } // Detectar cambios en el DOM const observer = new MutationObserver((mutations) => { let shouldRecheck = false; mutations.forEach(mutation => { if (mutation.type === 'childList' && mutation.addedNodes.length > 0) { shouldRecheck = true; } }); if (shouldRecheck) { setTimeout(checkScroll, 100); } }); observer.observe(document.body, { childList: true, subtree: true, attributes: false, characterData: false }); return observer; } // Inicializar el script function init() { // Esperar a que cargue la interfaz de AI Studio const initButton = () => { const button = createFloatingButton(); button.id = 'ai-studio-scroll-button'; document.body.appendChild(button); // Configurar visibilidad inicial toggleButtonVisibility(button); // Configurar observadores observeScrollChanges(button); console.log('AI Studio - Botón de scroll al inicio cargado y configurado'); }; // Intentar inicializar varias veces hasta que AI Studio esté completamente cargado let attempts = 0; const maxAttempts = 10; const tryInit = () => { attempts++; if (document.querySelector('.chat-container') || document.querySelector('.layout-main')) { initButton(); } else if (attempts < maxAttempts) { setTimeout(tryInit, 1000); } else { // Fallback: inicializar de todos modos initButton(); } }; setTimeout(tryInit, 1000); } // Ejecutar cuando la página esté lista if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } // También ejecutar después de un delay para asegurar que AI Studio haya cargado setTimeout(init, 3000); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址