Crear APK gratis

Estructura de la app y navegación

Smart User Scripts

Scripts por sitio con coincidencia de URL y momento de ejecución (como Greasemonkey)

1¿Qué son los Smart User Scripts?#

Los Smart User Scripts son scripts individuales con nombre, cada uno con:
🌐 patrones de URL (en qué páginas se ejecuta)
⏱ momento de ejecución (antes, durante o después de la carga)
✅ interruptor de activar/desactivar

Funcionan como Greasemonkey o Tampermonkey en los navegadores de escritorio, pero integrados directamente en tu app.

✅ Perfecto para:

  • Inicio de sesión automático SOLO en la página /login
  • Ocultar anuncios SOLO en las páginas de artículos (https://news.com/article/*)
  • Observar cambios del DOM con MutationObserver
  • Inyectar antes de que se renderice la página (document-start) para evitar destellos

Diferencia clave con la inyección rápida:
Inyección rápida = el mismo CSS/JS en TODAS las páginas
Smart User Scripts = control por script, por URL y por momento de ejecución

2Dónde encontrarlo#

Paso 4 (Permisos) → desplázate hacia abajo → tarjeta 🤖 Smart User Scripts.

Toca '+ Añadir' para crear un script nuevo. Cada script tiene:

  • Nombre: se muestra en la lista del administrador
  • Patrones de URL: uno por línea (admite el comodín *)
  • Ejecutar en: document-end / document-start / document-idle
  • Código: tu JavaScript
  • Interruptor de activado

Toca cualquier fila para editar o eliminar un script.

3Ejemplos de patrones de URL#

Los patrones controlan en qué páginas se ejecuta el script. Usa * como comodín:

# Run on every page of every site
*://*/*

# Run only on example.com (any path)
https://example.com/*

# Run on ALL pages of ANY .com domain
https://*.com/*

# Run only on the /login path
https://example.com/login
https://example.com/login/*

# Run on news article pages
https://news.example.com/article/*

4Momentos de ejecución explicados#

  • document-end (predeterminado)

Se ejecuta DESPUÉS de que la página termina de cargar. Es seguro y el más compatible. Úsalo para ocultar elementos, añadir botones y hacer seguimiento.

  • document-start ⚡ (avanzado)

Se ejecuta ANTES de que la página se renderice. Inyecta el script en el HTML sin procesar mediante shouldInterceptRequest. Elimina los encabezados CSP. Úsalo para CSS de modo oscuro o para forzar el viewport antes de pintar el diseño.

  • document-idle ⏱

Se ejecuta 1,5 segundos después de cargar la página. Es útil para captar contenido AJAX de carga tardía o ventanas modales que aparecen con retraso.

5Ejemplo 1: inicio de sesión automático solo en /login#

Coincidencia: https://myapp.com/login
Ejecutar en: document-end

// Auto-fill login form
(function() {
  var email = document.querySelector('input[type=email], input[name=email]');
  var pass  = document.querySelector('input[type=password]');
  if (email) email.value = '[email protected]';
  if (pass)  pass.value  = 'mypassword';
  // Uncomment to auto-submit:
  // var form = document.querySelector('form');
  // if (form) form.submit();
})();

6Ejemplo 2: ocultar muros de pago en páginas de artículos#

Coincidencia: https://news.site.com/article/*
Ejecutar en: document-end

// Hide paywall overlay and restore scroll
(function() {
  var overlay = document.querySelector('.paywall-overlay, .metered-content, #paywall');
  if (overlay) overlay.remove();
  document.body.style.overflow = 'auto';
  document.documentElement.style.overflow = 'auto';
})();

7Ejemplo 3: observar contenido dinámico (MutationObserver)#

Coincidencia: *://*/*
Ejecutar en: document-end
Para elementos que aparecen DESPUÉS de cargar la página (modales y anuncios de carga diferida):

// Remove any modal/popup that appears dynamically
(function() {
  var sel = '.modal, .popup, .overlay, [class*="modal"], [class*="popup"]';
  // Remove existing ones first
  document.querySelectorAll(sel).forEach(function(el) { el.remove(); });
  // Watch for new ones
  var obs = new MutationObserver(function() {
    document.querySelectorAll(sel).forEach(function(el) { el.remove(); });
  });
  obs.observe(document.body, { childList: true, subtree: true });
  // Stop watching after 30 s to save battery
  setTimeout(function() { obs.disconnect(); }, 30000);
})();

8Ejemplo 4: forzar el modo oscuro antes de renderizar (document-start)#

Coincidencia: *://*/*
Ejecutar en: document-start
Inyecta CSS antes de que se pinte la página, sin destello blanco:

// Inject dark theme before page renders
(function() {
  var s = document.createElement('style');
  s.id = '__force_dark__';
  s.textContent = [
    'html { filter: invert(1) hue-rotate(180deg) !important; }',
    'img,video,canvas,svg { filter: invert(1) hue-rotate(180deg) !important; }'
  ].join('\
');
  (document.head || document.documentElement).appendChild(s);
})();

9Ejemplo 5: analítica / seguimiento de eventos personalizado#

Coincidencia: https://myshop.com/*
Ejecutar en: document-idle
Envía eventos personalizados cuando la página se haya estabilizado por completo:

// Track page views + button clicks
(function() {
  // Page view
  console.log('[Analytics] Page: ' + location.href);

  // Track all CTA button clicks
  document.querySelectorAll('button, .btn, a[href]').forEach(function(el) {
    el.addEventListener('click', function() {
      console.log('[Analytics] Clicked: ' + (el.textContent || el.href));
      // Replace with your own tracker call, e.g. gtag('event', ...)
    });
  });
})();

10Seguridad y limitaciones#

⚡ document-start elimina los encabezados Content-Security-Policy de la página coincidente. Úsalo solo en sitios que sean tuyos o en los que confíes plenamente.

🔒 Política del mismo origen: JS no puede acceder a iframes de otro origen (PayPal, Stripe, inicio de sesión de Google). Esto lo impone el motor del navegador y no se puede evitar.

📵 Solo HTTPS: las API como geolocalización o cámara en scripts inyectados requieren HTTPS.

✅ Protección contra doble ejecución: cada script está protegido por una marca de window para que se ejecute solo una vez por página.

✅ Funciona sin conexión: los Smart User Scripts también se ejecutan en apps sin conexión empaquetadas en ZIP.

Esta página se genera a partir de la Guía de integración dentro de la propia app, así que dice exactamente lo mismo que la versión actual. Léela como Markdown.

Comprobado con la guía publicada el 2026-10-22.