Zum Hauptinhalt springen
@capgo/capacitor-textinteraction UI & System Open Source

Textinteraktion Capacitor Plugin

Deaktiviere die Textauswahl und die iOS-Lupe in der Capacitor WebView, damit sich deine App nativ anfühlt, und schalte sie wieder ein, sobald der User tippen muss.

  • iOS · Unterstützt (iOS 14.5+)
  • Android · Nicht unterstützt (resolves success: false)
  • Web · Nicht unterstützt (throws unimplemented)

Installieren

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

Anleitung

Text Interaction in Capacitor nutzen

Auf dem Gerät testen

Lade die Capgo App herunter und scanne den QR code.

Text Interaction Plugin-Vorschau QR code

Deaktiviere die Textauswahl und die Lupe in Capacitor iOS-Apps

@capgo/capacitor-textinteraction Ermöglicht es mit einem einzigen Aufruf, die Textinteraktion für die Capacitor WebView unter iOS ein- oder auszuschalten. Wenn sie deaktiviert ist, führt ein langes Drücken auf Text nicht mehr zur Auswahl, zeigt das Kopier-Menü an oder öffnet die Lupe, die mit iOS 15 eingeführt wurde. Deine Web-App fühlt sich dadurch nicht mehr wie eine Webseite in einem Native Shell an.

Im Hintergrund setzt das Plugin WKPreferences.isTextInteractionEnabled auf der App- WKWebView. Es ändert sonst nichts.

Anwendungsfälle

  • Games, Kiosks und Zeichen-Apps bei denen Long-Press- und Drag-Gesten niemals Text auswählen sollen.
  • Eigene Long-Press-Menüs die mit den nativen Auswahlgriffen und Callouts kollidieren.
  • Media Player, Maps und Carousels bei denen ein langsamer Swipe versehentlich die Lupe auslöst.
  • Markenorientiertes App-UI wo auswählbare Labels und Buttons das native Feeling stören.

Aktivieren Sie die Textinteraktion für Bildschirme, auf denen Nutzer längere Inhalte lesen und kopieren möchten oder auf denen sie Formulare ausfüllen.

Installieren

bun add @capgo/capacitor-textinteraction
bunx cap sync

Nein Info.plist Keys, Berechtigungen oder capacitor.config.ts Eingaben benötigt werden.

Plugin-Version Capacitor Version Wartung läuft
v8.x v8.x Ja
v7.x v7.x On-demand
v6.x und älter v6.x und älter Nein

Textinteraktion beim App-Start deaktivieren

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

Immer explizit enabled übergeben. Die native Seite behandelt fehlende Werte als false.

Vor der Eingabe wieder aktivieren

Solange die Textinteraktion deaktiviert ist, <input>, <textarea> und contenteditable Elemente akzeptieren keine Eingaben mehr. Aktiviere es für alle Screens mit Formularen und deaktiviere es wieder, sobald der User den Screen verlässt.

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

Bei Verwendung eines Routers rufst du setTextInteraction(true) im Enter-Hook der Routen mit Inputs auf (z. B. Vue Router beforeEnter, ein React useEffect, oder Angular ionViewWillEnter) und setTextInteraction(false) beim Verlassen der Routen auf.

Plugin vs. CSS

Die meisten Selektionen lassen sich per CSS verbergen:

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

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

CSS wirkt pro Element; vergessene Teile bleiben also wählbar, und es ändert nichts am Long-Press-Verhalten der WebView selbst. Das Plugin arbeitet auf WebView-Ebene: Ein Aufruf deckt alle Screens ab, inklusive der Lupe. Viele Apps nutzen beides: das Plugin für App-typische Screens und CSS für die Feinsteuerung in Screens, in denen die Textinteraktion aktiv bleibt.

API-Referenz

toggle(options)

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

Aktiviert oder deaktiviert die Textinteraktion für die Capacitor WebView.

  • enabled: true stellt die Auswahl, das Callout-Menü und die Lupe wieder her. false deaktiviert diese.
  • success: true als die Änderung angewendet wurde (iOS 14.5+ mit verfügbarer WebView). false auf Android und wenn keine WebView verfügbar ist.

getPluginVersion()

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

Gibt die native Plugin-Version zurück. Gibt web im Browser zurück.

Plattformverhalten

Plattform Verhalten
iOS 14.5+ Setzt isTextInteractionEnabled auf dem WKWebView. Gilt für alle Seiten, bis es erneut umgeschaltet wird.
Android Keine Aktion. Wird aufgelöst { success: false }. Nutze CSS, wenn du die Auswahl einschränken willst.
Web toggle wirft einen Fehler, da nicht implementiert. Schütze Aufrufe mit Capacitor.getPlatform().

Fehlerbehebung

  • Inputs funktionieren nicht mehr. Textinteraktion ist weiterhin deaktiviert. Rufe toggle({ enabled: true }) auf, bevor das Formular angezeigt wird.
  • Auf Android ändert sich nichts. Erwartet. Das Plugin wird nur für iOS unterstützt.
  • TextInteraction.toggle is not available on web. Der Aufruf erfolgte im Browser oder während der Entwicklung in einem Desktop-Browser. Umschließe ihn mit einem Plattform-Check.
  • Die Auswahl wird nach einem App-Neustart wiederhergestellt. Jeder Start erstellt eine neue WebView mit aktivierter Textinteraktion. Rufe dies toggle({ enabled: false }) beim App-Start auf.

Änderungen ohne App Store Review deployen

Das Umschalten der Textinteraktion erfolgt via JavaScript. Sobald das Plugin in deinem Native Build ist, kannst du mit einem Capgo live update steuern, anstatt auf das App Store Review zu warten.

Vollständige Referenz

FAQ

Text Interaction Plugin FAQ

Wie deaktiviere ich die Textauswahl in einer Capacitor iOS App?

Installiere @capgo/capacitor-textinteraction, führe bunx cap sync aus und rufe dann TextInteraction.toggle({ enabled: false }) auf. Das Plugin setzt isTextInteractionEnabled auf der WKWebView auf false, wodurch die Textauswahl und die Lupe für die gesamte WebView deaktiviert werden.

Warum reicht CSS user-select: none unter iOS nicht aus?

user-select und -webkit-touch-callout verhindern zwar die meiste Auswahl im Seiteninhalt, aber die WKWebView zeigt bei einem Long-Press immer noch die Lupe und Auswahlverhalten an. Zudem bleibt jedes Element, das du nicht stylst, auswählbar. Das Plugin schaltet die Textinteraktion auf WebView-Ebene ab, sodass ein einziger Aufruf alle Screens abdeckt.

Können Nutzer weiterhin in Inputs tippen, während die Textinteraktion deaktiviert ist?

Nein. Wenn die Textinteraktion deaktiviert ist, funktionieren Text-Inputs, Textareas und contenteditable-Elemente nicht mehr. Rufe TextInteraction.toggle({ enabled: true }) auf, bevor du ein Formular oder Suchfeld anzeigst, und deaktiviere es wieder, wenn der Nutzer den Screen verlässt.

Funktioniert das Plugin auch auf Android oder im Web?

Hinweis: Das Umschalten der Textinteraktion ist nur für iOS verfügbar. Unter Android wird der Call mit success=false aufgelöst, ohne etwas zu ändern. Im Web wirft der Call einen unimplemented-Fehler; schütze ihn daher mit Capacitor.getPlatform() === "ios".

Welche iOS- und Capacitor Versionen werden unterstützt?

Das native API benötigt iOS 14.5 oder neuer. Die Plugin-Hauptversionen folgen Capacitor: Nutze Plugin v8 mit Capacitor 8 und Plugin v7 mit Capacitor 7.

Bleibt die Einstellung nach einem App-Neustart erhalten?

Die Einstellung liegt in der WebView-Konfiguration und bleibt über Seiten-Navigationen hinweg aktiv, bis du toggle erneut aufrufst. Ein frischer App-Start erstellt eine neue WebView mit aktivierter Textinteraktion; rufe toggle also beim Startup erneut auf, wenn sie standardmäßig deaktiviert sein soll.

Wie installiere ich das Text Interaction Plugin in einer Capacitor App?

Führe "bun add @capgo/capacitor-textinteraction" (oder "npm install @capgo/capacitor-textinteraction") aus und danach "bunx cap sync", damit die iOS- und Android-Projekte das native code übernehmen. Importiere es in deinem App code aus "@capgo/capacitor-textinteraction".

Funktioniert @capgo/capacitor-textinteraction mit React, Vue und Angular?

Ja. Text Interaction ist ein Capacitor Package und funktioniert daher mit jedem Web-Framework, das in Capacitor läuft, einschließlich Ionic, React, Vue, Angular, Svelte und reinem JavaScript.

Welche Capacitor Version wird von @capgo/capacitor-textinteraction unterstützt?

Capgo Plugins folgen der Major-Version von Capacitor: Nutze die Plugin-Major-Version, die zu deiner Capacitor Major-Version passt (z. B. Plugin v8 bei Capacitor 8). Die Kompatibilitätstabelle im GitHub README listet die gepflegten Versionen auf.

Ist @capgo/capacitor-textinteraction kostenlos und Open Source?

Ja. Der code Source-Code ist öffentlich auf GitHub unter https://github.com/Cap-go/capacitor-textinteraction/ einsehbar und das Paket kann kostenlos via npm installiert werden. Bug-Reports und Pull Requests sind willkommen.

Kann ich code mit Text Interaction aktualisieren, ohne ein App Store Review abzuwarten?

Die Installation oder ein Upgrade des Plugins ändert den nativen code, weshalb ein neuer Store-Build nötig ist. Danach können JavaScript-, HTML- und CSS-Änderungen, die das Plugin aufrufen, sofort per Capgo Live Updates ausgeliefert werden.

Text Interaction Änderungen deployen, ohne auf den App Review zu warten

Sobald das Plugin in deinem Store-Build ist, bringt Capgo mit Live-Updates deine JavaScript-, HTML- und CSS-Änderungen in Minuten zu den Nutzern.

Starte mit Capgo