web-dev-qa-db-ja.com

HTML5は、スキャナーやクレジットカードリーダーなどの周辺機器と通信できますか?

私の会社は、クライアントマシンにインストールしてPOSトランザクションを実行するソフトウェアを作成しています。このソフトウェアは、さまざまな外部周辺機器(レシートプリンター、バーコードスキャナー、クレジットカードリーダーなど)とインターフェイスします。これを行うには、Microsoft OPOSライブラリを使用してVisual Studioで作成したWinFormsアプリを使用します。このライブラリは、クラウドサーバー(クライアントサーバーモデル)と通信します。

このモデルには、主に更新を伴う明らかな非効率性があります。これらの周辺機器とWeb経由で、できればWebブラウザ経由で通信する他の方法を研究しています。私が知る限り、Javaは、(アプレットを介して)私たちが探しているものを実行できる唯一の技術の1つであり、Adobe Flashも( Airプラットフォーム)。これらは実行可能ですが、Web対応のモバイルデバイスでソフトウェアを実行するため、好ましくありません。

Web上で外部の周辺機器と通信する他の方法についての提案はありますか?

64
Daniel Szabo

UPDATE(2019年1月16日):Credential Management API が発表されました。 現在ChromeおよびOpera でのみサポートされていますが、有望そうです。GoogleDevelopersは 記事 の詳細を書きました仕様上。

UPDATE(2016年12月28日):さらに数年が経過し、別の更新が行われました。これは、他の何よりも2つの新しい開発に焦点を当てます。 「フルデバイスAPI」の下の新しい「WebUSB&Web BlueTooth」セクションを参照してください。しかし、答えは同じままです。

UPDATE(2014年11月3日):元の投稿が作成されてから2年以上が経ちましたが、現時点では答えはほぼ同じです。ただし、いくつかの分野で当初の目標に近づいています。

元の回答:

これにはいくつかの方法があります。

バックグラウンド

HTML5仕様は「推奨」状態になりました。これは、HTML5の外観がほぼ設定されていることを意味します。ただし、世界中のすべてのマーケティング担当者が最善であると判断したのと同じ方法でHTML5を使用します。つまり、HTMLについては説明しません。さて、HTMLページから利用する限りでは、実際にはそうではありません。私が実際に議論するのは、JavaScript(JS)と の異なる色の馬 です。しかし、すべての意図と目的のために、HTML5と同じ見出しの下にすべてを入れています。これは、現在「光沢があり、新しい」ことを意味することが決定されています。

また、私が議論している項目はサポートが異なります。いくつかは非常にブラウザに依存したプロジェクト(Chromium固有の実装のような)であり、いくつかはブラウザがまだそれらを実装または実験していないかもしれないより標準化されたプロジェクトです。私は、この2つを区別しながら説明します。

フルデバイスAPI

ステータス:着信しているが、準備ができていない

ブラウザからデバイスにアクセスできるようになると、ゆっくりですが着実に進歩します。現在、多くの最新のブラウザは、 thecameragamepads などの一般的なデバイスにアクセスできますが、それらはすべて高レベルAPIです。 ブラウザベンダー標準グループ 、およびWebに関連する多くの企業はすべて、ローカルアプリケーションと同じくらい強力なWebアプリケーションを作成しようとしています。 。

しかし、あなたが探しているAPIはまだ進行中であり、まだまだ先です。特定のケース、およびほとんどのデバイスにwebappを接続するより一般的なケースでは、使用できるものからまだ数年先です。その分野でどんな素晴らしいものが登場するのかを知りたい場合は、直接役立ついくつかの項目を以下に示します。

  • ウェブ近距離無線通信(NFC)API
    残念ながら、これは今のところ水中で死んでいる可能性があります。しかし、元々W3Cの一部の人々(主にIntelのように見えます)は、NFC APIをWebに追加することを検討していたようです。
  • メディアキャプチャストリーム
    WebRTCグループは、バーコードスキャンやその他の機能などを統合できるカメラのようなメディアストリームへのプログラムによるアクセスに取り組んでいます。これはCRステータスに達し、 ブラウザで利用可能 ですが、それ自体ではあまり役に立ちません。
  • Web Bluetooth
    Bluetooth対応のツールがある場合、このAPIは、リッスンして接続できるコンピューターやデバイスからそれらに接続するのに役立ちます。現時点でこれの主なドライバーは、Chromeチームで、実験的な実装を含むようですが、まだ使用できる場所はないと思います(「WebUSB&Web BlueTooth」を参照)セクション)。
  • WebUSB
    これにより、デバイスの一覧表示やデバイスとの対話など、低レベルのUSB情報へのフルアクセスが可能になります。 Web BlueToothと同じように、これは現在のChrome petプロジェクトですが、私はそれにも依存しません(「WebUSBとWeb BlueTooth」セクションを参照)。
  • ネットワークサービス検出
    HTTPをブロードキャストして使用する他のデバイスまたはアイテムがネットワーク上にある場合、このAPIを使用すると、これらのサービスを検出して操作できます。ブラウザの実装はありませんが、W3Cのワーキングドラフトにあります。

元々、MozillaはBoot2Gecko(またはFirefox OS)のためにこれらの多くを推進していました。ただし、そのプロジェクトが正式にキャンセルされたため、現在これらの分野で大きな進展は見られません。

ただし、Chromeチームのメンバーは、これらに取り組むだけでなく、ブラウザにライブで配置することに決めたようです。

WebUSBおよびWeb BlueTooth

ソーセージのように、Web標準がどのように作られているかを知らない方が良い
-アブラハムリンカーン(おそらく)

Chromeチームはこれらを実験的な機能としてこっそりと独自の仕様を開発したように見えるので、このエリアには少し話題がありました。あなたが望んでいたこと。

各ブラウザーベンダーとW3C貢献者グループには独自のスタイルがあり、独自の方法で仕様に貢献しています。結果は通常で、ブラウザが同意したかなりまともな仕様です。しかし、何もないところから何かに行くのは...面倒です。本当に面倒。そして、多くの場合、かなりのプロセスです。常に良い仕様になるわけではありません(そう、Florianの妥協について話しているのですが...)でも、そうなっても時間がかかります。

ただし、Googleはこのバージョンの仕様をすべて独自に開発したようです。そして、私の経験では、Googleの仕様に対するアプローチは常に少し...まあ...私の個人的な意見はさておき、「gung-ho」と言います。彼らはただ深いところに飛び込む傾向があります。そして、それは彼らがここでやったことのようです。

これらの仕様または実装が標準になると、このようなものになることは非常に疑わしいです。それに問題はありません。それはプロセスの一部です。しかし、この実装に依存したり、それに対してコードや製品を開発したりするつもりはありません。これはウェブ上で前例のない機能であり、すべてのブラウザベンダーはこれについて大きな発言権を望んでいます。

とはいえ、これは実際には良いことです。このような状況でGoogleがよくすること(良くも悪くも)の1つは、会話を強制し、物事を進めることができます。また、ブラウザに機能が搭載されていて、実験的な機能であっても、要求に応じて熱を上げることができます。そのため、この分野ですぐにさらなる進展が見られるかもしれません。

PhoneGap Apache Cordova。あなたの携帯電話のために

ステータス:完全な機能ではなく、電話のみ

Apache Cordova 、以前は Adob​​e PhoneGap は、プログラムをHTML、CSS、およびJSで記述して、下位レベルにアクセスできるようにする方法です。携帯電話などの機能、およびデバイス間でのコンパイル。これはプログラムを実装する方法になりますが、必ずしもデスクトップアプリケーションではなく、電話アプリケーションになります。検討するオプションと、私が言及したと思ったもの。

Cordovaは上記の機能のいくつかを既に実装していますが、NFCやBlueToothなどのより強力な機能はありません。

Native-Appソリューション(Windows 8用)

ステータス:可能ですが、OS固有のデスクトップアプリ

Windows 8は、HTMLおよびJSでアプリケーションを構築する機能を提供します。これにより、 their API を介してOSの低レベル機能に簡単にアクセスできます。それの外観から、それはかなり広範囲であり、あなたは多くのことができます。ただし、クロスOSサポートについて言及しましたが、これにより明らかに1つのOSに制限されます。

それはとてもFlash-yです!

ステータス:Dying/Dead、Webアプリとしては不可能

Flashは、Web経由でシステムに直接アクセスできません。 AIRアプリケーションを作成することもできますが、それはWebベースにするという目的をある程度無効にします。さらに、モバイルおよびWeb上でのFlashサポートは減少傾向にあります。

NodeJS

ステータス:ちょっとした痛みがあり、デスクトップアプリとしてのみ可能です

NodeJSおよびJSアプリケーションは、ここ2〜3年で話題になっています。私はそれがまだそこにはまだないと感じたので、元の投稿でそれについて議論しませんでした。しかし、物事は進歩しており、この種の事柄の準備が整いつつあり、成長するユーザーベースのサポートとパワーを備えています。ただし、特定のケースでは、使用することはお勧めしません。それはユーザーのマシン上でローカルである必要があり、NodeJS(および同様のエンジン)が現在どのように存在するかにより、物事を少し複雑にする多くの追加の構成とセットアップが必要になります。

したがって、NodeJSまたは同様のエンジンでHTML、CSS、およびJSを使用してアプリを構築し、必要なものに低レベルでアクセスできますが、ローカルである必要があります。顧客のためにそれをインストールしたい時。

...今、私はどこにいましたか?

では、それはどこに私たちを残すのでしょうか?簡単です。コードベースとして単一の言語/コードセットが必要な場合、HTML/CSS/JSはまだ優れたオプションではありません。しかし、彼らはいつの日かかもしれない。今のところ、あなたの選択肢は、あなたが顧客にとって最適だと思うものに限定されています。 Javaはあなたがリストした安定したオプションですが、明らかに独自の欠点があります。Webが開発されるにつれて、新しい機能から多くの本当にクールなことが出てくると思いますが、静止する方法があります。

もっと読む:

84
LoveAndCoding

これは可能ですが、間接的に行う必要があります。理論的には、I/Oを取得し、ソケットを介してI/Oを送信する低レベル言語でソケットサーバーを作成できます(リレー、私は推測します)。 HTML5は、このソケットサーバーと通信するためにWebSocketsまたは同等のものを使用します。

10
bobbybee

WebUSB APIで実現できるようになりました。

Chromeで利用可能 バージョン54以降。

これはW3Cエディターのドラフトであるため、他のブラウザーベンダーに採用されることを期待(希望)できます...

4
Supersharp

私は最近これについて多くのことを考えてきました...次は何をすべきかを考えて、ほとんどがVB6で書かれたPOSアプリを持っています。 HTML5はオプションであり、VSPEを使用してJSにシリアルのものを入れると考えていました。

http://www.eterlogic.com/Products.VSPE.html

この製品が大好き!必要な場所でシリアルトラフィックを取得するのに非常にうまく機能するので、少なくとも概念実証としてはうまくいくと思います。 「コネクタ」タイプと「tcpclient」および「tcpserver」の組み合わせを使用する必要があります。

1
EJA

記録のために、2016年には(chrome 26以降)うまく機能しますが、 今後2年間で廃止 になる方法は、html5をchrome appおよび chrome.usb (またはchrome.serialまたはchrome.bluetooth)を使用します。

現在chrome.usbを使用しており、 WebUSB API (Supersharpの回答を参照)を使用してWebアプリに移行する予定です。Googleがchromeアプリを廃止するまでに採用されることを望みます????。

0
James