対象の 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 ポートは使えないようですし…。何か腹案をお持ちでしたら、教えて頂けると嬉しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。