Native Messaging

ネイティブメッセージング

拡張機能やアプリは他に似ているAPI使用してネイティブアプリケーションとメッセージを交換することができ、メッセージパッシングAPIを 。 この機能をサポートするネイティブアプリケーションは、拡張子と通信する方法を知っているネイティブメッセージングホストを登録する必要があります。 Chromeは別のプロセスでホストを起動し、標準入力と標準出力ストリームを使用してそれと通信します。

ネイティブメッセージングホスト

ネイティブメッセージングホストを登録するために、アプリケーションは、ネイティブメッセージングホストの設定を定義するマニフェストファイルをインストールする必要があります。 以下は、マニフェストファイルの例です。

{ "name": "com.my_company.my_application", "description": "My Application", "path": "C:\\Program Files\\My Application\\chrome_native_messaging_host.exe", "type": "stdio", "allowed_origins": [ "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/" ]}

ネイティブメッセージングホストマニフェストファイルには有効なJSONであることと、次のフィールドが含まれている必要があります。

ネイティブメッセージングホストの場所

マニフェストファイルの場所は、プラットフォームに依存します。

Windowsでは 、マニフェストファイルは、ファイルシステムのどこにでも配置することができます。 アプリケーションインストーラは、レジストリを作成する必要があります key HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\ com.my_company.my_application or HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\ com.my_company.my_application , マニフェストファイルへの完全パスにそのキーのデフォルト値を設定します。 たとえば、次のコマンドを使用します。

REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application" /ve /t REG_SZ /d "C:\path\to\nmh-manifest.json" /f

または次を使用して.regファイルを:

Windowsレジストリエディタバージョン5.00 [HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application]@="C:\\path\\to\\nmh-manifest.json"

Chromeはネイティブメッセージングホストを検索する場合、最初の32ビットのレジストリは、その後、64ビットレジストリを照会されます。

OS XとLinuxでは、ネイティブメッセージングホストのマニフェストファイルの場所は、ブラウザ(Google Chromeの、クロム)によって異なります。 ユーザーレベルのネイティブメッセージングホストが内のサブディレクトリで検索されている間、システム全体のネイティブメッセージングホストは、固定された場所を見上げているユーザープロファイルディレクトリと呼ばれるNativeMessagingHosts

OS Xの(システム全体)

Google Chromeの/Library/Google/Chrome/NativeMessagingHosts/ com.my_company.my_application .json

クロム/Library/Application Support/Chromium/NativeMessagingHosts/ com.my_company.my_application .json

OS X(ユーザー固有の、 デフォルトのパス

Google Chromeの~/Library/Application Support/Google/Chrome/NativeMessagingHosts/ com.my_company.my_application .json

クロム~/Library/Application Support/Chromium/NativeMessagingHosts/ com.my_company.my_application .json

Linuxの(システム全体)

Google Chromeの: /etc/opt/chrome/native-messaging-hosts/ com.my_company.my_application .json

クロム: /etc/chromium/native-messaging-hosts/ com.my_company.my_application .json

Linuxの(ユーザ固有の、 デフォルトのパス

Google Chromeの~/.config/google-chrome/NativeMessagingHosts/ com.my_company.my_application .json

クロム~/.config/chromium/NativeMessagingHosts/ com.my_company.my_application .json

ネイティブメッセージングプロトコル

Chromeは別々のプロセスの各ネイティブメッセージングホストを開始し、標準入力(使用すると通信stdinと標準出力( stdout )。 同フォーマットは両方向にメッセージを送信するために使用されます。各メッセージは、UTF-8エンコードされ、JSONを使用して直列化され、ネイティブのバイト順で32ビットのメッセージ長に先行されます。 ネイティブメッセージングホストからの単一メッセージの最大サイズは、主にネイティブアプリケーションを誤動作からChromeを保護するために、1メガバイトです。 ネイティブメッセージングホストに送信されるメッセージの最大サイズは4 GBです。

メッセージポートを使用して作成された場合runtime.connectNative Chromeをネイティブメッセージングホストプロセスを開始し、ポートが破壊されるまで実行されていることを保持します。 一方、メッセージを使用して送信されたときruntime.sendNativeMessageを 、メッセージポートを作成せずに、Chromeはメッセージごとに新しいネイティブメッセージングホストプロセスを開始します。 その場合、ホストプロセスによって生成された第1のメッセージは、元の要求に対する応答として扱われる、すなわちChromeは時に指定された応答のコールバックに渡しますruntime.sendNativeMessageが呼び出されます。 その場合のネイティブメッセージングホストによって生成された他のすべてのメッセージは無視されます。

ネイティブアプリケーションへの接続

送信とし、ネイティブアプリケーションからメッセージを受信すると、クロス拡張メッセージングと非常によく似ています。 主な違いはということですruntime.connectNativeが代わりに使用されruntime.connect、およびruntime.sendNativeMessageが代わりに使用されruntime.sendMessage。

「nativeMessaging」許可がされている場合、これらのメソッドにのみ使用することができます宣言拡張機能のマニフェストファイルに。

次の例では、作成しruntime.Portのネイティブメッセージングホストに接続したオブジェクトcom.my_company.my_application 、そのポートからのメッセージのリスニングを開始し、1つの出力メッセージを送信します。

var port = chrome.runtime.connectNative('com.my_company.my_application'); port.onMessage.addListener(function(msg) { console.log("Received" + msg);}); port.onDisconnect.addListener(function() { console.log("Disconnected");}); port.postMessage({ text: "Hello, my_application" });

runtime.sendNativeMessageはポート、例えばを作成せずにネイティブアプリケーションにメッセージを送信するために使用することができます。

chrome.runtime.sendNativeMessage('com.my_company.my_application', { text: "Hello" }, function(response) { console.log("Received " + response); });

ネイティブメッセージングのデバッグ

ネイティブメッセージングホストの起動に失敗した場合には、への書き込みをstderrまたは通信プロトコルに違反した場合、出力はクロームのエラーログに書き込まれます。 LinuxとOS Xでは、このログは簡単にコマンドラインからChromeを起動し、端末での出力を見てアクセスすることができます。 Windowsでは、使用--enable-loggingで説明したようにログを有効にする方法

ここでの問題を解決するためのいくつかのエラーやヒントがあります:

ネイティブメッセージングホストの起動に失敗しました。

あなたがファイルを実行するための十分な権限を持っているかどうかを確認してください。

指定された無効なネイティブメッセージングホスト名。

名前が無効な文字が含まれているかどうか確認してください。 唯一の小文字の英数字、アンダースコアとドットが許可されています。 名前は、開始またはドットで終わり、ドットが他のドットが続くことができないことはできません。

ネイティブホストが終了しました。

メッセージはクロムによって読み込まれた前にネイティブメッセージングホストへのパイプが壊れていました。 これは、最も可能性の高いネイティブメッセージングホストから開始されます。

指定されたネイティブメッセージングホストが見つかりません。

    • 名前は、拡張子にし、マニフェストファイルに正しく入力されていますか?

    • マニフェストは正しいディレクトリに、正しい名前で置かれていますか? 参照してください。 ネイティブメッセージングホストの場所を予想フォーマットの。

    • 正しい形式のマニフェストファイルがありますか? 具体的には、JSONの構文が正しく、値が定義と一致しないネイティブメッセージングホストマニフェストを

    • で指定されたファイルないpath存在しますか? Windowsでは、パスは相対的かもしれないが、OS XとLinuxでは、パスは絶対パスでなければなりません。

ネイティブメッセージングホストのホスト名が登録されていません。 (Windowsのみ)

ネイティブメッセージングホストは、Windowsレジストリに見つかりませんでした。 ダブルチェック使用してregedit鍵が本当に作成し、文書化された時として必要なフォーマットと一致されたかどうかネイティブメッセージングホストの場所を

指定されたネイティブ・メッセージング・ホストへのアクセスは禁止されています。

拡張機能の原点は、に記載されていallowed_origins

ネイティブメッセージングホストとの通信エラーが発生しました。

これは非常に一般的なエラーであり、ネイティブメッセージングホストでの通信プロトコルの不正な実装を示しています。

    • 内のすべての出力れていることを確認しますstdoutに付着し、ネイティブメッセージングプロトコル 。 デバッグの目的でいくつかのデータを印刷したい場合は、への書き込みstderr

    • 32ビットのメッセージの長さがプラットフォームのネイティブ整数形式(リトルエンディアン/ビッグエンディアン)であることを確認します。

    • メッセージの長さは1024 * 1024を超えてはなりません。

    • メッセージサイズは、メッセージのバイト数に等しくなければなりません。 文字が複数のバイトで表現することができるので、これは、文字列の「長さ」とは異なることができます。

    • Windowsのみ:プログラムのI / Oモードに設定されていることを確認しO_BINARY デフォルトでは、I / OモードはO_TEXT改行(のようなメッセージ・フォーマット破壊し\n = 0A Windowsスタイルの改行コードに置き換えられます\r\n = 0D 0A I / Oモードを使用して設定することができ__setmode

例/ API / nativeMessagingのディレクトリには、ネイティブメッセージングホストとして機能するPythonスクリプトと通信するためにネイティブメッセージングを使用するサンプルアプリケーションが含まれています。 サンプルホストのディレクトリには、ネイティブメッセージングホストを削除/インストールするためのスクリプトが含まれています。

たとえば、最初のダウンロードを試してみると、抽出するために、 サンプルアプリケーションサンプルのホストを 。 実行install_host.batまたはinstall_host.shネイティブメッセージングホストをインストールするには(Linuxの/ OS Xを)。 その後、 アプリをロードすると、アプリと対話します。 実行uninstall_host.batまたはuninstall_host.sh完了したら、ネイティブメッセージングホストの登録を解除します。