Saltar al contenido principal
@capgo/capacitor-textinteraction UI y Sistema Código abierto

Interacción de texto plugin Capacitor

Desactiva la selección de texto y la lupa de iOS en la WebView de Capacitor para que tu app se sienta nativa, y actívala de nuevo cuando el usuario deba escribir.

  • iOS · Compatible (iOS 14.5+)
  • Android · No compatible (devuelve success: false)
  • Web · No compatible (lanza error unimplemented)

Instalar

bun add @capgo/capacitor-textinteraction bunx cap sync
npm, pnpm o yarn
  • npm install @capgo/capacitor-textinteraction
  • pnpm add @capgo/capacitor-textinteraction
  • yarn add @capgo/capacitor-textinteraction

Guía

Cómo usar Text Interaction en Capacitor

Probar en el dispositivo

Descarga la app Capgo y escanea el QR code.

QR de previsualización de code para Text Interaction

Desactiva la selección de texto y la lupa en apps Capacitor iOS

@capgo/capacitor-textinteraction te permite con una sola llamada activar o desactivar la interacción de texto en la Capacitor WebView de iOS. Al desactivarla, mantener presionado el texto ya no lo selecciona, no muestra el menú de copiar ni activa la lupa que iOS 15 reintrodujo. Tu web app dejará de sentirse como una página web dentro de un shell nativo.

Internamente, el plugin configura WKPreferences.isTextInteractionEnabled on the app's WKWebView. No cambia nada más.

Cuándo usarlo

  • Juegos, kioscos y apps de dibujo donde los gestos de mantener presionado o arrastrar no deben seleccionar texto.
  • Menús personalizados al mantener presionado que chocan con los selectores y menús nativos.
  • Reproductores, mapas y carruseles donde un deslizamiento lento activa la lupa por accidente.
  • Interfaz con estilo de app donde las etiquetas y botones seleccionables rompen la sensación nativa.

Mantén activa la interacción de texto en pantallas donde los usuarios lean contenido largo que deseen copiar o donde deban completar formularios.

Instalar

bun add @capgo/capacitor-textinteraction
bunx cap sync

No Info.plist teclas, permisos o capacitor.config.ts entradas son necesarios.

Versión del plugin Versión de Capacitor Mantenido
v8.x v8.x Sí
v7.x v7.x Bajo demanda
v6.x y anteriores v6.x y anteriores No

Desactivar la interacción de texto al iniciar la app

import { Capacitor } from '@capacitor/core';
import { TextInteraction } from '@capgo/capacitor-textinteraction';

if (Capacitor.getPlatform() === 'ios') {
  const { success } = await TextInteraction.toggle({ enabled: false });
  if (!success) console.warn('Text interaction could not be changed on this device');
}

Pásalo siempre enabled de forma explícita. El lado nativo trata el valor ausente como false.

Reactivarlo antes de que el usuario escriba

Mientras la interacción de texto esté desactivada, <input>, <textarea> y contenteditable los elementos dejan de aceptar input. Vuelve a activarlo en cualquier pantalla con un formulario y desactívalo de nuevo cuando el usuario salga.

import { Capacitor } from '@capacitor/core';
import { TextInteraction } from '@capgo/capacitor-textinteraction';

const isIos = Capacitor.getPlatform() === 'ios';

export async function setTextInteraction(enabled: boolean) {
  if (!isIos) return false;
  const { success } = await TextInteraction.toggle({ enabled });
  return success;
}

// Entering a login, search or checkout screen
await setTextInteraction(true);

// Leaving it
await setTextInteraction(false);

Con un router, llama a setTextInteraction(true) en el hook enter de las rutas que contengan inputs (por ejemplo, Vue Router beforeEnter, un React useEffect, o Angular ionViewWillEnter) y setTextInteraction(false) al salir de ellas.

Plugin vs CSS

Puedes ocultar la mayor parte de la selección con CSS:

body {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}

input,
textarea,
[contenteditable] {
  -webkit-user-select: text;
  user-select: text;
}

El CSS se aplica por elemento, así que todo lo que olvides seguirá siendo seleccionable y no cambia cómo el propio WebView gestiona la pulsación larga. El plugin funciona a nivel de WebView: una sola llamada cubre todas las pantallas, incluida la lupa. Muchas apps usan ambos: el plugin para pantallas tipo app y CSS para un control más fino dentro de pantallas donde la interacción con texto sigue activa.

Referencia de API

toggle(options)

toggle(options: { enabled: boolean }): Promise<{ success: boolean }>

Activa o desactiva la interacción de texto en la WebView de Capacitor.

  • enabled: true restaura la selección, el menú contextual y la lupa. false los desactiva.
  • success: true cuando se aplicó el cambio (iOS 14.5+ con WebView disponible). false en Android y cuando no hay una WebView disponible.

getPluginVersion()

getPluginVersion(): Promise<{ version: string }>

Devuelve la versión del plugin nativo. Devuelve web en el navegador.

Comportamiento de la plataforma

Plataforma Comportamiento
iOS 14.5+ Configura isTextInteractionEnabled en el WKWebView. Se aplica a todas las páginas hasta que se desactive.
Android No-op. Resuelve { success: false }. Usa CSS si necesitas limitar la selección.
Web toggle lanza un error de implementación. Protege las llamadas con Capacitor.getPlatform().

Solución de problemas

  • Los inputs dejaron de funcionar. La interacción de texto sigue desactivada. Llama a toggle({ enabled: true }) antes de mostrar el formulario.
  • No hay cambios en Android. Es de esperar. El plugin solo es compatible con iOS.
  • TextInteraction.toggle is not available on web. La llamada se ejecutó en el navegador o durante el desarrollo en un navegador de escritorio. Envuélvela en una comprobación de plataforma.
  • La selección reaparece tras reiniciar la app. Cada inicio crea una nueva WebView con la interacción de texto habilitada. Llama a toggle({ enabled: false }) durante el arranque.

Lanza cambios sin pasar por la revisión de la App Store

Alternar la interacción de texto es JavaScript. Una vez que el plugin está en tu Native Build, puedes cambiar dónde y cuándo se ejecuta con un Capgo live update en lugar de esperar la revisión de la App Store.

Referencia completa

FAQ

FAQ del plugin Text Interaction

¿Cómo desactivo la selección de texto en una app de Capacitor para iOS?

Instala @capgo/capacitor-textinteraction, ejecuta bunx cap sync y luego llama a TextInteraction.toggle({ enabled: false }). El plugin establece isTextInteractionEnabled en false en el WKWebView, lo que desactiva la selección de texto y la lupa en todo el WebView.

¿Por qué no es suficiente usar CSS user-select: none en iOS?

user-select y -webkit-touch-callout bloquean la mayoría de las selecciones, pero el WKWebView puede seguir mostrando la lupa y el comportamiento de selección al mantener presionado, además de que cualquier elemento sin estilo seguirá siendo seleccionable. El plugin desactiva la interacción de texto a nivel de WebView, por lo que una sola llamada cubre todas las pantallas.

¿Pueden los usuarios seguir escribiendo en inputs si la interacción de texto está desactivada?

No. Mientras la interacción de texto esté desactivada, los inputs, textareas y elementos contenteditable dejarán de funcionar. Llama a TextInteraction.toggle({ enabled: true }) antes de mostrar un formulario o campo de búsqueda, y desactívalo de nuevo cuando el usuario salga de esa pantalla.

¿Funciona el plugin en Android o en la web?

No. El toggle de text interaction solo funciona en iOS. En Android, la llamada se resuelve con success en false y no cambia nada. En la web, la llamada lanza un error de unimplemented, así que protégela con Capacitor.getPlatform() === &quot;ios&quot;.

¿Qué versiones de iOS y Capacitor son compatibles?

El API nativo requiere iOS 14.5 o superior. Las versiones major del plugin siguen a Capacitor: usa el plugin v8 con Capacitor 8 y el plugin v7 con Capacitor 7.

¿Se mantiene la configuración tras reiniciar la app?

El ajuste vive en la configuración de la WebView, así que se mantiene entre navegaciones de página hasta que vuelvas a llamar a toggle. Al iniciar la app de nuevo se crea una WebView nueva con text interaction habilitado, así que vuelve a llamar a toggle al arrancar si quieres que esté desactivado por defecto.

¿Cómo instalo el plugin Text Interaction en una app de Capacitor?

Ejecuta &quot;bun add @capgo/capacitor-textinteraction&quot; (o &quot;npm install @capgo/capacitor-textinteraction&quot;), luego ejecuta &quot;bunx cap sync&quot; para que los proyectos de iOS y Android tomen el code nativo. Impórtalo desde &quot;@capgo/capacitor-textinteraction&quot; en el code de tu app.

¿Funciona @capgo/capacitor-textinteraction con React, Vue y Angular?

Sí. Text Interaction es un paquete de Capacitor, así que funciona con cualquier framework web que corra dentro de Capacitor, incluidos Ionic, React, Vue, Angular, Svelte y JavaScript puro.

¿Qué versión de Capacitor es compatible con @capgo/capacitor-textinteraction?

Los plugins de Capgo siguen la versión mayor de Capacitor: usa la versión mayor del plugin que coincida con la versión mayor de tu Capacitor (por ejemplo, el plugin v8 con Capacitor 8). La tabla de compatibilidad del README de GitHub lista las versiones mantenidas.

¿Es @capgo/capacitor-textinteraction gratuito y de código abierto?

Sí. El código fuente de code es público en GitHub: https://github.com/Cap-go/capacitor-textinteraction/ y el paquete se puede instalar gratis desde npm. Los reportes de bugs y pull requests son bienvenidos.

¿Puedo actualizar code que usa Text Interaction sin pasar por la revisión de la App Store?

Instalar o actualizar el plugin cambia el code nativo, así que requiere un nuevo build para la tienda. Después, los cambios de JavaScript, HTML y CSS que llamen al plugin se pueden publicar al instante con las live updates de Capgo.

Lanza cambios de Text Interaction sin esperar la revisión de la app

Una vez que el plugin esté en tu store build, Capgo live updates envía tus cambios de JavaScript, HTML y CSS a los usuarios en minutos.

Empieza con Capgo