次に、ユーザーはinput type=file
をクリックします。ユーザーはupload file + camera
ダイアログを取得する必要があります。このhtml属性accept
およびcapture
に使用しています。しかし、一部の最新のデバイスでは、これは起こりません。以下に、コード例とその動作の有無を示す表を示します。コード例は、Mobile Safari
およびChrome
でテストされています。
TL; DR:
input type file
だけの5つのコード例があります。
1。( jsfiddle
)
<input type="file" accept="image/*" capture>
2。 ( jsfiddle
)
<input type="file" accept="image/*" capture="camera">
3。 ( jsfiddle
)
<input type="file" capture="camera">
4。 ( jsfiddle
)
<input type="file" capture>
5。 ( jsfiddle
)
<input type="file" accept="image/*">
テストデバイス:
結果の表:
upload image dialog with camera
を意味しますupload dialog(not image only) with camera
を意味しますonly camera
が有効であることを意味しますChrome
を意味しますMobile Safari
を意味します#
--------------------------------------------------------------------------------
|devices/example | Ch 1| Ch 2| Ch 3| Ch 4| Ch 5| MS 1| MS 2| MS 3| MS 4| MS 5|
--------------------------------------------------------------------------------
|Samsung S3/4.1 | N | N | P | P | W | W | N | P | P | W |
--------------------------------------------------------------------------------
|Samsung S3/4.3 | N | N | P | P | P | N | N | P | P | P |
--------------------------------------------------------------------------------
|Samsung Galaxy Tab| N | N | P | P | W | W | N | P | P | W |
--------------------------------------------------------------------------------
|Samsung Note | N | N | P | P | W | W | N | P | P | W |
--------------------------------------------------------------------------------
|iPhone 5 | W | W | P | P | W | W | Y | P | P | W |
--------------------------------------------------------------------------------
|Nexus 4 | N | N | P | P | W | - | - | - | - | - |
--------------------------------------------------------------------------------
ご覧のとおり、すべてのブラウザでupload file + camera
ダイアログのみを取得できます。
<input type="file" accept="image/*">
のみ。しかし、この場合はcapture
属性がありません。これは私を心配させ、Android 4.3に問題があります。
ありがとう。
追伸質問は特別ですが、私のサイトでは、ユーザーがその画像とカメラにアクセスできるようにする必要があります。また、私のテーブルは誰にとっても役立つと思います。また、誰も答えない場合は答えを探し、ここに答えを投稿します。
これが実際の答えです。次のユーザーのためにここに投稿してください:
実際には、現在の実装はキャプチャ属性にまったく依存せず、タイプと受け入れ属性のみに依存しているようです。ブラウザは、ユーザーがファイルを取得する場所を選択できるダイアログボックスを表示し、
capture
属性は考慮されません。たとえば、iOS Safariは、画像およびビデオ(オーディオではない)のaccept属性(キャプチャではない)に依存しています。accept
属性を使用しない場合でも、ブラウザで「Take Photo or Video」と「Choose Existing」を選択できます(これを指摘してくれたto @ firtに感謝します)。
this から
2016年2月17日編集:この動作はデバイス上でまだアクティブです。
「正しい」コードと使用すべきコードは5番目のコードです。
<input type="file" accept="image/*">
それが、ほとんどのデバイスで正しく機能している理由です。上記のコードはcorrect、completeおよびenoughでiOSとAndroidそれ:
accept="video/*"
を、オーディオにはaccept="audio/*"
を使用し、すべてを許可するにはスキップします)。
- キャプチャ属性なしでアップロードダイアログに常にカメラを追加するものをブラウザに信頼できますか?
はい
capture
属性は、ダイアログにカメラオプションを含めるためには使用されません(<input type="file">
で十分です)が、ウェブカメラからの直接キャプチャが優先であることを示すために使用されます。 W3C勧告仕様 から:
キャプチャ属性は、指定されている場合、デバイスからのメディアの直接キャプチャが優先されることを示すブール属性です。
capture
はAndroid 3.0+でサポートされており、capture
がコードに含まれている場合、カメラアプリに直接移動します。
IOS6-10では、少なくとも2つのオプションを常に提供するサポートはありません:「写真を撮る」+「写真ライブラリ」。
capture
属性は仕様で進化しました(これがStackOverflow全体でいくつかのバージョンが表示される理由です)。
accept="image/*;capture=camera"
capture="camera"
(文字列)capture
(ブール、W3C勧告候補、)PS:HTMLメディアキャプチャに関する多くの研究を行いました。 HTMLメディアキャプチャの正しい構文 および iOS9のメディアキャプチャの新しいプロンプト を参照してください。ここに私の テストベンチ と20以上のコードの組み合わせがあります。