Salta al contenuto principale
@capgo/capacitor-textinteraction UI e sistema Open source

Interazione testuale Plugin Capacitor

Disabilita la selezione del testo e la lente d'ingrandimento iOS nella WebView di Capacitor per un feeling più nativo, poi riattivala quando l'utente deve digitare.

  • iOS · Supportato (iOS 14.5+)
  • Android · Non supportato (resolves success: false)
  • Web · Non supportato (errore unimplemented)

Installa

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

Guida

Come usare Text Interaction in Capacitor

Testa sul dispositivo

Scarica l'app Capgo, poi scansiona il QR code.

QR code per l'anteprima del plugin Text Interaction

Disabilita la selezione del testo e la lente d'ingrandimento nelle app Capacitor iOS

@capgo/capacitor-textinteraction ti permette di attivare o disattivare l'interazione con il testo nella Capacitor WebView su iOS con una sola chiamata. Quando è disattivata, la pressione prolungata sul testo non lo seleziona più, non mostra il callout di copia e non attiva la lente d'ingrandimento reintrodotta con iOS 15. La tua web app smette di sembrare una pagina web dentro una shell nativa.

Sotto il cofano, il plugin imposta WKPreferences.isTextInteractionEnabled on the app's WKWebView. Non cambia nient'altro.

Quando usarlo

  • Giochi, kiosk e app di disegno dove i gesti di pressione prolungata e trascinamento non devono mai selezionare il testo.
  • Menu personalizzati con pressione prolungata che vanno in conflitto con i selettori e il menu contestuale nativi.
  • Media player, mappe e carousel dove uno swipe lento attiva accidentalmente la lente d'ingrandimento.
  • UI brandizzata e simile a un'app dove etichette e pulsanti selezionabili rovinano l'esperienza nativa.

Mantieni attiva l'interazione con il testo nelle schermate in cui gli utenti leggono contenuti lunghi che potrebbero voler copiare o dove devono compilare dei form.

Installa

bun add @capgo/capacitor-textinteraction
bunx cap sync

No Info.plist chiavi, permessi o capacitor.config.ts voci sono necessari.

Versione plugin Versione Capacitor Mantenuto
v8.x v8.x Sì
v7.x v7.x On demand
v6.x e precedenti v6.x e precedenti No

Disabilita l'interazione con il testo all'avvio

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');
}

Passalo sempre enabled esplicitamente. Il lato nativo considera il valore mancante come false.

Riattivala prima che gli utenti digitino

Quando l'interazione con il testo è disattivata, <input>, <textarea> e contenteditable gli elementi smettono di accettare input. Riattivalo per ogni schermata con un form, poi disattivalo quando l'utente esce.

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, chiama setTextInteraction(true) nell'hook enter delle rotte che contengono input (ad esempio Vue Router beforeEnter, un React useEffect, o Angular ionViewWillEnter) e setTextInteraction(false) quando le lasci.

Plugin vs CSS

You can hide most selection with CSS:

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

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

Il CSS funziona elemento per elemento, quindi tutto ciò che dimentichi resta selezionabile e non cambia il modo in cui la WebView gestisce il long-press. Il plugin agisce a livello di WebView: una sola chiamata copre ogni schermata, inclusa la lente d'ingrandimento. Molte app usano entrambi: il plugin per le schermate in stile app e il CSS per un controllo fine nelle schermate in cui l'interazione con il testo resta attiva.

riferimento API

toggle(options)

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

Attiva o disattiva l'interazione con il testo nella WebView di Capacitor.

  • enabled: true ripristina la selezione, il callout e la lente d'ingrandimento. false li disabilita.
  • success: true quando la modifica è stata applicata (iOS 14.5+ con WebView disponibile). false su Android e quando non è disponibile una WebView.

getPluginVersion()

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

Restituisce la versione del plugin nativo. Restituisce web nel browser.

Comportamento della piattaforma

Piattaforma Comportamento
iOS 14.5+ Imposta isTextInteractionEnabled su WKWebView. Si applica a tutte le pagine finché non viene disattivato.
Android No-op. Risolve { success: false }. Usa il CSS se devi limitare la selezione.
Web toggle lancia un errore di metodo non implementato. Proteggi le chiamate con Capacitor.getPlatform().

Risoluzione problemi

  • Gli input hanno smesso di funzionare. L'interazione con il testo è ancora disabilitata. Chiama toggle({ enabled: true }) prima che il form venga mostrato.
  • Su Android non cambia nulla. Esatto. Il plugin supporta solo iOS.
  • TextInteraction.toggle is not available on web. La chiamata è avvenuta nel browser o durante lo sviluppo su desktop. Avvolgila in un controllo della piattaforma.
  • La selezione viene ripristinata dopo il riavvio dell'app. Ogni avvio crea una nuova WebView con l'interazione del testo abilitata. Chiama toggle({ enabled: false }) durante l'avvio.

Rilascia la modifica senza la revisione dell'App Store

L'attivazione dell'interazione testuale è JavaScript. Una volta che il plugin è nella tua build nativa, puoi cambiare dove e quando viene eseguito con un Capgo live update invece di aspettare la revisione dell'App Store.

Riferimento completo

FAQ

FAQ sul plugin Text Interaction

Come disabilito la selezione del testo in un'app Capacitor su iOS?

Installa @capgo/capacitor-textinteraction, esegui bunx cap sync, quindi chiama TextInteraction.toggle({ enabled: false }). Il plugin imposta isTextInteractionEnabled a false su WKWebView, disattivando la selezione del testo e la lente d'ingrandimento per l'intera WebView.

Perché CSS user-select: none non è sufficiente su iOS?

user-select e -webkit-touch-callout bloccano la maggior parte delle selezioni nel contenuto della pagina, ma la WKWebView può comunque mostrare la lente d'ingrandimento e il comportamento di selezione al long-press, e ogni elemento non stilizzato rimane selezionabile. Il plugin disattiva l'interazione testuale a livello di WebView, quindi una sola chiamata copre ogni schermata.

Gli utenti possono ancora digitare negli input se l'interazione testuale è disabilitata?

No. Quando l'interazione testuale è disabilitata, input di testo, textarea ed elementi contenteditable smettono di funzionare. Chiama TextInteraction.toggle({ enabled: true }) prima di mostrare un form o un campo di ricerca, e disabilitalo di nuovo quando l'utente lascia quella schermata.

Il plugin funziona su Android o sul web?

No. L'attivazione della text interaction è disponibile solo su iOS. Su Android la chiamata viene risolta con successo impostato a false senza cambiare nulla. Sul web la chiamata restituisce un errore di metodo non implementato, quindi proteggila con Capacitor.getPlatform() === "ios".

Quali versioni di iOS e Capacitor sono supportate?

Il API nativo richiede iOS 14.5 o versioni successive. Le versioni major del plugin seguono Capacitor: usa il plugin v8 con Capacitor 8 e il plugin v7 con Capacitor 7.

L'impostazione persiste dopo il riavvio dell'app?

L'impostazione risiede nella configurazione della WebView, quindi rimane attiva durante la navigazione tra le pagine finché non chiami di nuovo toggle. All'avvio dell'app viene creata una nuova WebView con la text interaction abilitata; se vuoi che sia disattivata di default, chiama di nuovo toggle all'avvio.

Come installo il plugin Text Interaction in un'app Capacitor?

Esegui "bun add @capgo/capacitor-textinteraction" (o "npm install @capgo/capacitor-textinteraction"), poi esegui "bunx cap sync" affinché i progetti iOS e Android carichino il code nativo. Importalo da "@capgo/capacitor-textinteraction" nel code della tua app.

@capgo/capacitor-textinteraction funziona con React, Vue e Angular?

Sì. Text Interaction è un pacchetto Capacitor, quindi funziona con qualsiasi framework web che giri dentro Capacitor, inclusi Ionic, React, Vue, Angular, Svelte e JavaScript puro.

Quale versione di Capacitor supporta @capgo/capacitor-textinteraction?

I plugin Capgo seguono la major version di Capacitor: usa la major version del plugin che corrisponde alla tua major version di Capacitor (ad esempio plugin v8 con Capacitor 8). La tabella di compatibilità nel README di GitHub elenca le versioni mantenute.

@capgo/capacitor-textinteraction è gratuito e open source?

Sì. Il codice sorgente di code è pubblico su GitHub all'indirizzo https://github.com/Cap-go/capacitor-textinteraction/ e il pacchetto si installa gratuitamente da npm. Bug report e pull request sono benvenuti.

Posso aggiornare code che usa Text Interaction senza una revisione dell'App Store?

Installare o aggiornare il plugin modifica il code nativo, quindi serve una nuova build per lo store. Dopo, le modifiche a JavaScript, HTML e CSS che chiamano il plugin possono essere rilasciate subito con le live updates di Capgo.

Rilascia le modifiche a Text Interaction senza attendere la revisione dell'app

Una volta incluso il plugin nel tuo store build, Capgo invia le modifiche a JavaScript, HTML e CSS tramite live updates in pochi minuti.

Inizia con Capgo