Cordova iOS アプリで長押し(ロングタップ, ロングプレス)によるコンテキストメニューを無効化
はじめに
Cordova iOS アプリで長押し(ロングタップ, ロングプレス)によるコンテキストメニューを無効化する方法。
TL;DR
- テキスト選択、3Dタッチを無効化する場合は
config.xml
を設定SuppressesLongPressGesture
,Suppresses3DTouchGesture
をtrue
- 画像などの長押しを無効化する場合は CSS で設定
- 意図通りに動くか、他箇所で不具合が出ないかはしっかり検証が必要
目次
環境・条件
iOS Simulator 上で確認。
- Xcode Version 12.3 (12C33)
- iPhone 11 Pro (iOS 14.3)
1 | $ sw_vers |
詳細
テキスト選択を無効化
参考: Config.xml - Apache Cordova
config.xml
で設定可能。
SuppressesLongPressGesture
をtrue
に設定- 3Dタッチを無効化するなら
Suppresses3DTouchGesture
もtrue
に設定Suppresses3DTouchGesture = true
にすると、連動してSuppressesLongPressGesture = true
になる模様
1 |
|
公式ドキュメントの抜粋と DeepL による翻訳。
Suppresses3DTouchGesture(boolean)
Default: false
Set to true to avoid 3D Touch capable iOS devices rendering a magnifying glass widget when the user applies force while longpressing the webview. Test your app thoroughly since this disables onclick handlers, but plays nice with ontouchend. If this setting is true, SuppressesLongPressGesture will effectively be true as well.SuppressesLongPressGesture(boolean)
Default: false
Set to true to avoid iOS9+ rendering a magnifying glass widget when the user longpresses the webview. Test your app thoroughly since this may interfere with text > selection capabilities.
Config.xml - Apache Cordova より引用==========================================
Suppresses3DTouchGesture(boolean)
デフォルト: false
true に設定すると、3D Touch 対応の iOS デバイスが、ユーザーがウェブビューを長押しししている間に力を加えたときに虫眼鏡ウィジェットをレンダリングしないようにします。この設定は onclick ハンドラを無効にしますが、ontouchend との連携は良好なので、アプリを十分にテストしてください。この設定がtrueの場合、SuppressesLongPressGestureも事実上trueになります。SuppressesLongPressGesture(boolean)
デフォルト: false
trueに設定すると、ユーザーがウェブビューを長押しししたときにiOS9+が虫眼鏡ウィジェットをレンダリングしないようになります。これはテキスト選択機能に干渉する可能性があるため、アプリを十分にテストしてください。
画像などの長押しを無効化
参考:
- javascript - Preventing default context menu on longpress / longclick in mobile Safari (iPad / iPhone) - Stack Overflow
- Disabling Text Selection and the Context Menu in Hybrid Mobile Apps
CSS で設定。画像の例のみあげているが、おそらくリンク(a
タグ)でも同じはず(未検証)。
1 | img { |
まとめ
- テキスト選択、3Dタッチを無効化する場合は
config.xml
を設定SuppressesLongPressGesture
,Suppresses3DTouchGesture
をtrue
- 画像などの長押しを無効化する場合は CSS で設定
- 意図通りに動くか、他箇所で不具合が出ないかはしっかり検証が必要
参考文献
- Config.xml - Apache Cordova
- javascript - Preventing default context menu on longpress / longclick in mobile Safari (iPad / iPhone) - Stack Overflow
- Disabling Text Selection and the Context Menu in Hybrid Mobile Apps
関連記事
- Cordova で Repro とカスタム URL スキームを使ってディープリンクを扱う
- Cordova アプリに Twitter Timeline の埋め込み
- Cordova iOS axios で Network Error となる場合の回避策
- Cordova でアプリ名やアプリのバージョン情報などを取得
- Cordova で端末やエミュレータを指定してデプロイする
- Cordova Android で iframe 内のリンクをシステムデフォルトブラウザで開く方法
- JavaScript で URL のクエリパラメータを操作する方法
- jQuery Select2 で、初期値の設定と選択状態のクリア