iOS/AndroidでWebアプリからネイティブの日付選択機能を呼び出す
質問
HTML5を使用して、異なるプラットフォームでネイティブのWebアプリケーションを実行する可能性を探ろうとしています。現在
<input type="date">
フィールドは、Android と iOS の標準的なソフト キーボードを開くだけです。将来的には、モバイル OS のソフト キーボードには日付選択機能などが含まれるようになると思います。
<select>
が今日ネイティブの select を呼び出すのと同じです。
これはAndroidでもiOSでも実装されておらず、ネイティブUIで実装されているので、Webアプリがネイティブの日付ピッカーを起動する、つまりクリックされたときに起動することは可能でしょうか?
そうすれば、jQuery mobileやYUIなどのJavaScriptライブラリの使用をやめることができます。
私の質問が何か不明な点があれば、教えてください。よろしくお願いします :-)
どのように解決するのですか?
数年前から、一部のデバイスで
<input type="date">
をサポートしているデバイスもありますが、そうでないものもあるので、注意が必要です。以下は、2012 年の観察結果ですが、現在でも有効な場合があります。
-
次のような場合
type="date"
がサポートされているかどうかは、その属性を設定し、その値を読み返すことでわかります。サポートしていないブラウザやデバイスは、タイプにdate
に設定しても無視されtext
を返す。あるいは モダニズル を使って検出することもできます。Android 4.0.3 の Samsung Galaxy S2 がサポートしているように、一部の Android バージョンをチェックするだけでは十分ではないので注意してください。type="date"
をサポートしていますが、より新しい Android 4.0.4 を搭載した Google/Samsung Nexus S では をサポートしていません。 . -
ネイティブの日付ピッカーに日付をプリセットするときは、デバイスが認識する形式を使用するようにしてください。そうしないと、デバイスは黙って拒否し、既存の値を表示しようとしたときに空の入力フィールドが残ることがあります。Android 4.0.3を搭載したGalaxy S2で日付選択機能を使用する場合、日付の入力フィールドに自動的に
<input>
を2012-6-1
を6月1日に設定する。しかし、JavaScriptから値を設定する場合、先頭のゼロが必要です。2012-06-01
. -
をサポートしていないデバイスでネイティブの日付ピッカーを表示するために Cordova (PhoneGap) などを使用する場合、そのデバイスに対応した
type="date"
:-
組み込みサポートを正しく検出するようにします。2012 年に Android 4.0.3 を実行している Galaxy S2 で起こったように、誤って も
を使用すると、日付ピッカーが 2 回連続して表示されることになります (最初の表示で "set" をクリックした後にもう一度)。 -
同じページに複数の入力がある場合、一部のデバイスでは、別のフォーム フィールドに入るために "previous" および "next" が表示されます。iOS 4 では、これは
onclick
ハンドラをトリガーしないため、ユーザーに通常の入力を与えることができます。使用方法onfocus
を使用することで、プラグインをトリガーすることができるようです。 -
iOS 4 では
onclick
またはonfocus
で2012 iOSプラグインを起動すると、まず通常のキーボードが表示され、その上に日付ピッカーが配置されます。次に、日付ピッカーを使用した後、やはり通常のキーボードを閉じる必要がある。使用方法$(this).blur()
を使用して日付ピッカーが表示される前にフォーカスを外すことは、iOS 4 では役に立ち、私がテストした他のデバイスには影響しませんでした。しかし、iOS ではキーボードがすばやく点滅し、最初の使用では日付の選択画面が遅くなるため、さらに混乱する可能性がありました。通常のキーボードを完全に無効にするには、入力欄にreadonly
とすることで通常のキーボードを完全に無効にすることができますが、その場合、同じ画面上で他の入力をすると "previous" と "next" ボタンが無効になってしまいます。また、iOS 4 のプラグインは、ネイティブの日付ピッカーに "キャンセル" や "クリア" を表示させなかったようです。 -
iOS 4 の iPad (シミュレーター) では、2012 年に Cordova プラグインが正しくレンダリングされなかったようで、基本的にユーザーに日付を入力または変更するためのオプションを与えなかったようです。 (iOS 4 は Web ビューの上にあるネイティブの日付ピッカーをうまくレンダリングしないのかもしれませんし、私の Web ビューの CSS スタイリングが何らかの影響を及ぼしているのかもしれません。)
-
しかし、2012 年に再び、Android の日付選択プラグインが iOS のプラグインと同じ JavaScript API を使用しようとし、その例では
allowOldDates
を使用していましたが、Android 版は実際にはそれをサポートしていませんでした。また、新しい日付は2012/7/2
という形で返すのに対して、iOS版ではMon Jul 02 2012 00:00:00 GMT+0200 (CEST)
.
-
-
たとえ
<input type="date">
がサポートされている場合でも、見た目が汚くなる場合があります。-
iOS 5 では、次のようにうまく表示されます。
2012-06-01
をローカライズしたフォーマットで表示します。1 Jun. 2012
またはJune 1, 2012
(といった具合です(さらに、日付ピッカーを操作したまま、それをすぐに更新することもできます)。しかし、Android 4.0.3 を実行している Galaxy S2 では、醜い2012-6-1
または2012-06-01
のように、どのロケールであっても -
iPad (シミュレーター) 上の iOS 5 は、日付入力に触れたとき、または別の入力で "previous" や "next" を使用したときに、キーボードがすでに表示されている場合には、キーボードを隠しません。その場合、入力の下に日付ピッカーが同時に表示されます。 と と表示され、下部のキーボードと は で、両方からの入力を許可しているように見えます。しかし、表示されている値は変更されますが、キーボードの入力は実際には無視されます。(キーボードがまだ表示されていないときは、日付入力に触れるとキーボードではなく日付ピッカーが表示されるだけです。 (これは実際のデバイスでは異なるかもしれません。コメントまたは編集をお願いします!)
-
デバイスは入力フィールドにカーソルを表示し、長押しでクリップボード オプションをトリガーし、場合によっては通常のキーボードも表示することがあります。クリックすると、デバイスによっては、通常のキーボードを一瞬だけ表示し、その後、日付のピッカーを表示するように変更することがあります。
-
関連
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] Androidでアクティビティ起動時にEditTextにフォーカスが当たらないようにする方法
-
[解決済み] アプリケーションからAndroidのWebブラウザでURLを開くにはどうすればよいですか?
-
[解決済み] Androidで現在の時刻と日付を取得する方法
-
[解決済み】iOSアプリの名前を変更する方法は?
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] bootstrap のポップオーバーがすべての要素の上に表示されない
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] <Enter>でjQuery UIダイアログを送信する
-
[解決済み] なぜ "use strict "はパフォーマンスを10倍向上させるのか?
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] CORS OriginヘッダーとCSRFトークンによるCSRF保護
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] JavaScriptでDIVを表示・非表示にするには?