Langsung ke konten utama
@capgo/capacitor-textinteraction UI & Sistem Open source

Interaksi Teks plugin Capacitor

Matikan seleksi teks dan lensa pembesar iOS di WebView Capacitor saat aplikasi Anda harus terasa native, lalu aktifkan kembali sebelum pengguna perlu mengetik.

  • iOS · Didukung (iOS 14.5+)
  • Android · Tidak didukung (resolves success: false)
  • Web · Tidak didukung (melempar error unimplemented)

Instal

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

Panduan

Cara menggunakan Text Interaction di Capacitor

Tes di perangkat

Download aplikasi Capgo, lalu scan QR code.

Pratinjau QR plugin Text Interaction code

Nonaktifkan seleksi teks dan lensa pembesar di aplikasi Capacitor iOS

@capgo/capacitor-textinteraction memberikan satu panggilan untuk mengaktifkan atau menonaktifkan interaksi teks pada Capacitor WebView di iOS. Saat nonaktif, menekan teks tidak lagi menyeleksinya, menampilkan callout salin, atau memunculkan lensa pembesar yang diperkenalkan ulang di iOS 15. Aplikasi web Anda tidak lagi terasa seperti halaman web di dalam shell native.

Di balik layar, plugin ini mengatur WKPreferences.isTextInteractionEnabled on the app's WKWebViewaplikasi. Tidak ada perubahan lain.

Kapan harus menggunakannya

  • Game, kios, dan aplikasi menggambar di mana gestur tekan lama dan seret tidak boleh menyeleksi teks.
  • Menu tekan lama kustom yang bentrok dengan handle seleksi dan callout native.
  • Pemutar media, peta, dan carousel di mana gesekan lambat secara tidak sengaja memicu loupe.
  • UI bermerek, seperti aplikasi di mana label dan tombol yang dapat dipilih merusak nuansa native.

Biarkan interaksi teks tetap aktif untuk layar tempat pengguna membaca konten panjang yang mungkin ingin disalin, atau saat mereka mengisi formulir.

Instal

bun add @capgo/capacitor-textinteraction
bunx cap sync

Tidak Info.plist keys, permissions, atau capacitor.config.ts entries diperlukan.

Versi plugin versi Capacitor Dipelihara
v8.x v8.x Ya
v7.x v7.x Sesuai permintaan
v6.x dan lebih lama v6.x dan lebih lama Tidak

Nonaktifkan interaksi teks saat aplikasi dimulai

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

Selalu kirim enabled secara eksplisit. Sisi native menganggap nilai yang hilang sebagai false.

Aktifkan kembali sebelum pengguna mengetik

Saat interaksi teks nonaktif, <input>, <textarea> dan contenteditable Elemen berhenti menerima input. Aktifkan kembali untuk layar dengan form, lalu matikan saat pengguna keluar.

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

Dengan router, panggil setTextInteraction(true) di enter hook rute yang berisi input (misalnya Vue Router beforeEnter, React useEffect, atau Angular ionViewWillEnter) dan setTextInteraction(false) saat keluar dari rute tersebut.

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

CSS bekerja per elemen, jadi apa pun yang Anda lupakan tetap bisa diseleksi, dan tidak mengubah cara WebView menangani long-press. Plugin bekerja di level WebView: satu panggilan mencakup semua layar, termasuk lensa pembesar. Banyak aplikasi menggunakan keduanya: plugin untuk layar bergaya aplikasi dan CSS untuk kontrol detail di dalam layar di mana interaksi teks tetap aktif.

referensi API

toggle(options)

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

Mengaktifkan atau menonaktifkan interaksi teks untuk Capacitor WebView.

  • enabled: true memulihkan seleksi, callout, dan lensa pembesar. false menonaktifkannya.
  • success: true ketika perubahan diterapkan (iOS 14.5+ dengan WebView tersedia). false di Android dan ketika tidak ada WebView yang tersedia.

getPluginVersion()

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

Mengembalikan versi plugin native. Mengembalikan web di browser.

Perilaku platform

Platform Perilaku
iOS 14.5+ Menetapkan isTextInteractionEnabled di WKWebView. Berlaku untuk semua halaman hingga diaktifkan kembali.
Android No-op. Resolusi { success: false }. Gunakan CSS jika Anda perlu membatasi seleksi.
Web toggle melempar error unimplemented. Lindungi panggilan dengan Capacitor.getPlatform().

Pemecahan Masalah

  • Input berhenti berfungsi. Interaksi teks masih nonaktif. Panggil toggle({ enabled: true }) sebelum form ditampilkan.
  • Tidak ada perubahan di Android. Sesuai harapan. Plugin ini hanya mendukung iOS.
  • TextInteraction.toggle is not available on web. Panggilan ini berjalan di browser atau saat development di browser desktop. Bungkus dengan platform check.
  • Seleksi muncul kembali setelah app di-restart. Setiap launch membuat WebView baru dengan text interaction aktif. Panggil toggle({ enabled: false }) saat startup.

Rilis perubahan tanpa review App Store

Toggle interaksi teks dilakukan lewat JavaScript. Setelah plugin ada di native build Anda, Anda bisa mengubah di mana dan kapan ia berjalan dengan Capgo live update alih-alih menunggu review App Store.

Referensi lengkap

FAQ

FAQ plugin Text Interaction

Bagaimana cara menonaktifkan seleksi teks di aplikasi Capacitor iOS?

Install @capgo/capacitor-textinteraction, jalankan bunx cap sync, lalu panggil TextInteraction.toggle({ enabled: false }). Plugin ini mengatur isTextInteractionEnabled menjadi false pada WKWebView, yang akan mematikan seleksi teks dan lensa magnifier untuk seluruh WebView.

Mengapa CSS user-select: none tidak cukup di iOS?

user-select dan -webkit-touch-callout menghentikan sebagian besar seleksi di konten halaman, tetapi WKWebView masih bisa menampilkan lensa magnifier dan perilaku seleksi saat long-press, dan elemen yang lupa diberi style tetap bisa diseleksi. Plugin ini mematikan interaksi teks di level WebView, jadi satu panggilan berlaku untuk semua layar.

Apakah pengguna masih bisa mengetik di input saat interaksi teks dinonaktifkan?

Tidak. Saat interaksi teks dinonaktifkan, input teks, textarea, dan elemen contenteditable akan berhenti berfungsi. Panggil TextInteraction.toggle({ enabled: true }) sebelum menampilkan form atau kolom pencarian, dan nonaktifkan kembali saat pengguna meninggalkan layar tersebut.

Apakah plugin ini berfungsi di Android atau web?

Tidak. Pengaktifan interaksi teks hanya tersedia di iOS. Di Android, panggilan ini menyelesaikan dengan success diset ke false dan tidak mengubah apa pun. Di web, panggilan ini melempar error unimplemented, jadi lindungi dengan Capacitor.getPlatform() === &quot;ios&quot;.

Versi iOS dan Capacitor mana yang didukung?

Native API membutuhkan iOS 14.5 atau lebih baru. Versi mayor plugin mengikuti Capacitor: gunakan plugin v8 dengan Capacitor 8 dan plugin v7 dengan Capacitor 7.

Apakah pengaturan tetap tersimpan setelah aplikasi di-restart?

Pengaturan ini ada pada konfigurasi WebView, jadi tetap berlaku selama navigasi halaman sampai Anda memanggil toggle lagi. Peluncuran aplikasi baru membuat WebView baru dengan interaksi teks diaktifkan, jadi panggil toggle lagi saat startup jika Anda ingin nonaktif secara default.

Bagaimana cara menginstal plugin Text Interaction di aplikasi Capacitor?

Jalankan &quot;bun add @capgo/capacitor-textinteraction&quot; (atau &quot;npm install @capgo/capacitor-textinteraction&quot;), lalu jalankan &quot;bunx cap sync&quot; agar proyek iOS dan Android mengambil native code. Impor dari &quot;@capgo/capacitor-textinteraction&quot; di code aplikasi Anda.

Apakah @capgo/capacitor-textinteraction bekerja dengan React, Vue, dan Angular?

Ya. Text Interaction adalah paket Capacitor, jadi bekerja dengan framework web apa pun yang berjalan di dalam Capacitor, termasuk Ionic, React, Vue, Angular, Svelte, dan JavaScript murni.

Versi Capacitor mana yang didukung oleh @capgo/capacitor-textinteraction?

Plugin Capgo mengikuti versi mayor Capacitor: gunakan versi mayor plugin yang sesuai dengan versi mayor Capacitor Anda (contoh: plugin v8 dengan Capacitor 8). Tabel kompatibilitas di README GitHub mencantumkan versi yang masih di-maintain.

Apakah @capgo/capacitor-textinteraction gratis dan open source?

Ya. Source code publik di GitHub pada https://github.com/Cap-go/capacitor-textinteraction/ dan paketnya gratis diinstal dari npm. Laporan bug dan pull request sangat kami terima.

Bisakah saya update code yang menggunakan Text Interaction tanpa review App Store?

Instalasi atau upgrade plugin akan mengubah native code, jadi butuh build store baru. Setelah itu, perubahan JavaScript, HTML, dan CSS yang memanggil plugin bisa langsung dikirim lewat live updates Capgo.

Rilis perubahan Text Interaction tanpa menunggu review aplikasi

Setelah plugin ada di build store Anda, live updates Capgo akan mengirim perubahan JavaScript, HTML, dan CSS ke pengguna dalam hitungan menit.

Mulai dengan Capgo