質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

4471閲覧

Chrome extensionを利用してシリアル通信を行うにあたり

退会済みユーザー

退会済みユーザー

総合スコア0

Chrome extension

Chrome拡張機能

0グッド

0クリップ

投稿2017/04/27 02:26

いつもお世話になっております。

Webページで、外部デバイスからserial通信にてデータを取得して
取得された内容を、JavaScriptに渡して、Ajaxにて通信を行おうと考えております。

もう少し具体的に説明しますと、Windows機のPCにバーコードリーダーをシリアルモードで接続して、COMポートから
データを読取り、JavaScriptにデータを渡そうと考えております。

extensionのタイプは、多く分けて3つあるかと思います。

Overview

利用イメージとしては、Webページを開いたらバーコードリーダーをかざすと、
読み取ったバーコードに応じて、Javascriptが起動するイメージです。

extensionの多くが、ツールバーやアドレスバーのアイコンをクリックしてから、
利用するイメージが強いのですが、対象のページが開いたら、クリック等のアクションをさせずに、
extensionの機能をすぐに利用させることは可能でしょうか?

これから、調査し制作していくにあたり、実現可能かどうか、教えて頂きたくいつもさせて頂きました。

すべてのドキュメントを読み切れておりませんが、可能であれば、
チャレンジしたいと考えております。

お手数をおかけしますが、ご教授よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

対象の Web ページから extension を呼び出すというだけでしたら、その Web ページの JavaScript から対応する Chrome extension に message を投げてやれば良いと思います。具体的には、次の公式ドキュメントにあるように、 extension の manifest.json 内で externally_connectable.matches へと対象の Web ページを追加しておけば、 Web ページから chrome.runtime.sendMessage()chrome.runtime.connect() といった API で extension 側へメッセージを投げることができるようになりますから、 extension 側ではそれを受け付ける Event pages を用意しておくという格好です。

Message Passing - Sending messages from web pages

manifest.json

json

1{ 2 ... 3 "background": { 4 "scripts": ["eventPage.js"], 5 "persistent": false 6 }, 7 "externally_connectable": { 8 "matches": [ 9 "https://your.site.com/barcode.html" 10 ] 11 } 12}

eventPage.js

javascript

1chrome.runtime.onMessageExternal.addListener( 2 function (message, sender, sendResponse) 3 { 4 console.log('message:', message.messageKey); 5 sendResponse({responseKey: 'responseString'}); 6 } 7);

barcode.html

javascript

1var extensinId = 'your_extension_id_abcdefgh'; 2 3chrome.runtime.sendMessage( 4 extensionId, 5 {messageKey: 'messageString'}, 6 function (response) 7 { 8 if (arguments.length == 0) { 9 alert(chrome.runtime.lastError); 10 return; 11 } 12 13 console.log('response:', response); 14 } 15);

※実際に双方向で通信する場合は、 chrome.runtime.connect() を使うことになると思います

ただ残念なことに、 COM ポートに接続するのが難しいかもしれません。 Chrome には Serial API が存在するのですが、これは Chrome App 用であって、 extension からは使用することができません。そして、 Chrome App は Chrome OS 以外でのサポートを段階的に終了していっている最中 であり、来年には Chrome OS 以外では Chrome App は起動すらしなくなってしまう予定だからです。

ではどうするかというと、恐らく Native Messaging API を使うことになるのではないでしょうか。こちらの API では、 OS ネイティブの実行可能ファイルを extension から呼び出して別プロセスで実行し、標準入出力経由で相互にやり取りができるようになります。これを使って、別途用意した COM ポート操作用の exe ファイルを叩くという格好です。

他にも方法はあるのかもしれませんが、ちょっと私には思い当りませんでした。 USB デバイスであれば WebUSB が使えるかもしれませんが、さすがに実験的すぎますし、 PPAPI では COM ポートは使えないようですし…。何か腹案をお持ちでしたら、教えて頂けると嬉しいです。

投稿2017/05/02 08:45

argparse

総合スコア1017

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問