メインコンテンツにジャンプ
@capgo/capacitor-textinteraction UI & システム オープンソース

テキストインタラクション Capacitor プラグイン

Capacitor WebView で、ユーザーが入力する必要がある前まで、テキストの選択と iOS のマグニファイア レンズをオフにします。

  • iOS · サポート対象 (iOS 14.5+)
  • Android · サポート対象外 (resolves success: false)
  • Web · 利用できません (未実装の例外を投げます)

インストール

bun add @capgo/capacitor-textinteraction bunx cap sync
npm、pnpmまたはyarn
  • npm install @capgo/capacitor-textinteraction
  • pnpm add @capgo/capacitor-textinteraction
  • yarn add @capgo/capacitor-textinteraction

ガイド

Capacitorでテキストインタラクションを使用する方法

デバイスでテスト

Capgoアプリをダウンロードし、QRコードcodeをスキャンしてください。

テキストインタラクションプラグインプレビューQRcode

Capacitor iOSアプリでテキスト選択と拡大鏡レンズを無効にする

@capgo/capacitor-textinteraction Capacitor iOSアプリのWebViewのテキストインタラクションをオンオフにする1つのコールを提供します。オフの場合、長押しするとテキストが選択されなくなり、コピーのコールアウトも表示されなくなり、iOS 15で再導入された拡大鏡レンズも表示されなくなります。ウェブアプリは、ネイティブシェルの中にウェブページのように感じなくなります。

プラグインは以下の設定を行っています WKPreferences.isTextInteractionEnabled アプリの WKWebView。何も変更されません。

使用するタイミング

  • ゲーム、キオスク、描画アプリ 長押しとドラッグジェスチャーでテキストを選択しない場合
  • 長押しメニュー ネイティブの選択ハンドルとコールアウトと衝突する
  • メディアプレーヤー、地図、カーレンズ スローのスワイプがループをトリガーする
  • ブランド化された、アプリのようなUI 選択可能なラベルとボタンがネイティブのフィールを破壊する

テキストインタラクションをオンにしたい画面では、ユーザーが長いコンテンツを読むか、フォームを入力する場合に使用する

インストール

bun add @capgo/capacitor-textinteraction
bunx cap sync

否 Info.plist キー、パーミッション、エントリが必要ありません capacitor.config.ts プラグインバージョン

長押しメニューをカスタマイズする Capacitor バージョン メンテナンス
v8.x v8.x はい
v7.x v7.x オンデマンド
v6.x 以前 v6.x 以前 いいえ

アプリ起動時にテキストインタラクションを無効にする

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

常に明示的に enabled 明示的に指定しないと、 false.

再有効にする

テキスト入力がオフの場合、 <input>, <textarea> そして contenteditable 要素は入力を受け付けなくなる。フォームが入力可能な画面で有効にする、そしてユーザーが画面を離れたときに再び無効にする

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

ルーターを使用している場合、 setTextInteraction(true) ルーターが入力フィールドを含むルートのenterハンドラで呼び出す beforeEnter,a React useEffectルーターが入力フィールドを含むルートのleaveハンドラで呼び出す ionViewWillEnter) and setTextInteraction(false) ルーターが入力フィールドを含むルートのleaveハンドラで呼び出す

プラグイン vs CSS

CSS を使用して選択を隠すことができます:

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

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

CSS は要素ごとに機能するため、忘れられた部分は選択可能なままになり、ウェブビュー自体の長押しハンドリングには影響しません。プラグインはウェブビューのレベルで機能します: 1 つの呼び出しで、すべての画面、包括的にマグニファイアのレンズがカバーされます。多くのアプリでは、両方を使用します: プラグインはアプリのような画面用、CSS はテキスト インタラクションが画面内で細かい制御が必要な場合に使用します。

API リファレンス

toggle(options)

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

Capacitor ウェブ ビューのテキスト インタラクションをオンまたはオフにします。

  • enabled: true 選択、コールアウト、そしてマグニファイアのレンズが復元されます。 false それらが無効になります。
  • success: true iOS 14.5 以降のウェブ ビューが利用可能な場合に変更が適用されたとき。 false Android では、ウェブ ビューが利用可能でない場合に。

getPluginVersion()

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

ネイティブ プラグインのバージョンを返します。返り値は web ブラウザ内です。

プラットフォームの動作

プラットフォーム 動作
iOS 14.5+ 設定 isTextInteractionEnabled の上 WKWebViewAndroid
何も行わない。解決策 。CSSを使用する必要がある場合は、選択を制限する。 { success: false }Web
Web toggle トラブルシューティング Capacitor.getPlatform().

Troubleshooting

  • 入力が機能しなくなりました。 テキストインタラクションはまだ無効です。呼び出し toggle({ enabled: true }) フォームが表示される前に呼び出してください。
  • Androidでは何も変わりません。 期待どおりです。プラグインはiOSのみをサポートしています。
  • TextInteraction.toggle is not available on web. ブラウザまたはデスクトップブラウザで開発中の場合、呼び出しは実行されました。プラットフォームチェックで囲んでください。
  • 選択肢は再起動後に戻ります。 各起動で新しいWebViewが作成され、テキストインタラクションが有効になります。起動時に呼び出してください。 toggle({ enabled: false }) 関連プラグイン

App Storeのレビューなしで変更を配信する

テキストインタラクションを切り替えることはJavaScriptです。Nativeビルドにプラグインを追加すると、__CAPGO_KEEP_0__ __CAPGO_KEEP_1__を使用して、どこでいつ実行するかを変更できます。 Capgo live updateを使用するのではなく、App Storeのレビューを待つ必要があります。 完全なリファレンス

ドキュメント:

FAQ

テキストインタラクション プラグイン FAQ

How do I disable text selection in a Capacitor iOS app?

インストールしてください @capgo/capacitor-textinteraction、bunx cap sync を実行し、次に TextInteraction.toggle({ enabled: false }) を呼び出してください。 プラグインは WKWebView に isTextInteractionEnabled を false に設定し、iOS でテキストの選択と拡大鏡のレンズをすべての WebView に無効にします。

CSS の user-select: none は iOS で十分ではありません。なぜですか?

iOSのWKWebViewでは、user-selectと-webkit-touch-calloutでページ内の選択を抑制することができますが、長押しでマグニファイアのレンズと選択の挙動が表示される可能性があり、スタイルを忘れたすべての要素が選択可能なままです。このプラグインは、WebViewのレベルでテキストのインタラクションをオフにします。したがって、1つの呼び出しですべての画面をカバーできます。

ユーザーはテキストのインタラクションが無効の場合に、入力フィールドに文字を入力できますか?

いいえ。テキストのインタラクションが無効の場合、テキスト入力フィールド、テキストエリア、contenteditable要素は機能しません。フォームまたは検索フィールドを表示する前に、TextInteraction.toggle({ enabled: true })を呼び出し、ユーザーがその画面を離れたときに再び無効にします。

このプラグインはAndroidまたはWebで動作しますか?

いいえ。テキストのインタラクションの切り替えはiOSのみです。Androidでは呼び出しは成功をfalseに設定し、何も変えません。Webでは呼び出しは実装されていないエラーを投げます。Capacitor.getPlatform() === &quot;ios&quot;の場合にguardします。

iOSとCapacitorのどのバージョンがサポートされていますか?

ネイティブAPIにはiOS 14.5以上が必要です。プラグインのメジャーバージョンはCapacitorに従います。例えば、v8を使用する場合はCapacitor 8、v7を使用する場合はCapacitor 7を使用します。

設定はアプリを再起動した後も続きますか?

設定はWebViewの構成に保存されるため、ページのナビゲーション間で効果が続きます。ただし、再起動すると新しいWebViewが作成され、テキストのインタラクションが有効になります。起動時にデフォルトでオフにする場合は、再びtoggleを呼び出してください。

Capacitor-TextInteractionプラグインをCapacitorアプリにインストールする方法は何ですか。

Run &quot;bun add @capgo/capacitor-textinteraction&quot; (or &quot;npm install @capgo/capacitor-textinteraction&quot;), then run &quot;bunx cap sync&quot; so the iOS and Android projects pick up the native code. Import it from &quot;@capgo/capacitor-textinteraction&quot; in your app code.

@capgo/capacitor-textinteraction は React、Vue、Angular とどのように動作しますか?

Yes. Text Interaction is a Capacitor package, so it works with any web framework that runs inside Capacitor, including Ionic, React, Vue, Angular, Svelte and plain JavaScript.

どの Capacitor バージョンが @capgo/capacitor-textinteraction をサポートしますか?

Capgo プラグインは Capacitor のメジャーバージョンに従います。使用するプラグインのメジャーバージョンは、Capacitor のメジャーバージョンと一致するものを使用してください (例えば、プラグイン v8 と Capacitor 8)。GitHub の README に記載されている互換性のテーブルを参照してください。

@capgo/capacitor-textinteraction は無料でオープンソースですか?

Yes. The source code is public on GitHub at https://github.com/Cap-go/capacitor-textinteraction/ and the package is free to install from npm. Bug reports and pull requests are welcome.

@code/__CAPGO_KEEP_1__-textinteraction を使用する code をアップデートすることは App Store のレビューなしで可能ですか?

プラグインをインストールまたはアップグレードすると、ネイティブ code が変更されます。したがって、ストアのビルドが必要になります。その後、JavaScript、HTML、CSS の変更がプラグインを呼び出すと、Capgo のライブアップデートで即時配信できます。

UI &amp; システム

すべてのプラグインを参照

アプリレビューを待たずにテキストインタラクションの変更を配信

Once the plugin is in your store build, Capgo live updates push your JavaScript, HTML and CSS changes to users in minutes.

Start with Capgo