확장 프로그램 및 앱은 다른 메시지 전달 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이어야 하며 다음 필드를 포함합니다.
Name |
Description |
name |
기본 메시징 호스트의 이름입니다. 클라이언트는 이 문자열을 runtime.connectNative 또는 runtime.sendNativeMessage에 전달합니다. 이 이름은 소문자 영숫자, 밑줄 및 점만 포함 할 수 있습니다. 이름은 점으로 시작하거나 끝날 수 없으며 점 뒤에 다른 점이 올 수 없습니다. |
description |
짧은 애플리케이션 설명. |
path |
기본 메시징 호스트 바이너리에 대한 경로입니다. Linux 및 OSX에서 경로는 절대 경로여야 합니다. Windows에서는 매니페스트 파일이 있는 디렉토리에 상대적 일 수 있습니다. 호스트 프로세스는 호스트 바이너리가 포함 된 디렉토리로 설정된 현재 디렉토리로 시작됩니다. 예를 들어 이 매개 변수가 C : \ Application \ nm_host.exe로 설정되면 현재 디렉토리 C : \ Application \에서 시작됩니다. |
type |
기본 메시징 호스트와 통신하는 데 사용되는 인터페이스 유형입니다. 현재 이 매개 변수에 대해 가능한 값은 stdio입니다. Chrome이 호스트와 통신하기 위해 stdin 및 stdout을 사용해야 함을 나타냅니다. |
allowed_origins |
기본 메시징 호스트에 대한 액세스 권한이 있어야 하는 확장 목록입니다. chrome-extension : // * / *와 같은 와일드 카드는 허용되지 않습니다. |
기본 메시징 호스트 위치
매니페스트 파일의 위치는 플랫폼에 따라 다릅니다.
Windows에서 매니페스트 파일은 파일 시스템의 모든 위치에 있을 수 있습니다. 애플리케이션 설치 프로그램은 레지스트리 키 HKEY_LOCAL_MACHINE \ SOFTWARE \ Google \ Chrome \ NativeMessagingHosts \ com.my_company.my_application 또는 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 Registry Editor Version 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 또는 Chromium)에 따라 다릅니다. 시스템 전체의 기본 메시징 호스트는 고정 된 위치에서 조회되는 반면 사용자 수준의 기본 메시징 호스트는 NativeMessagingHosts라는 사용자 프로필 디렉토리 내의 하위 디렉토리에서 조회됩니다.
OS X (system-wide)
Google Chrome:/Library/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json Chromium: /Library/Application Support/Chromium/NativeMessagingHosts/com.my_company.my_application.json
OS X (user-specific, default path)
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json
Chromium: ~/Library/Application Support/Chromium/NativeMessagingHosts/com.my_company.my_application.json
Linux (system-wide)
/etc/opt/chrome/native-messaging-hosts/com.my_company.my_application.json
Chromium: /etc/chromium/native-messaging-hosts/com.my_company.my_application.json
Linux (user-specific, default path)
~/.config/google-chrome/NativeMessagingHosts/com.my_company.my_application.json
Chromium: ~/.config/chromium/NativeMessagingHosts/com.my_company.my_application.json
Native messaging protocol
Chrome은 별도의 프로세스에서 각 기본 메시징 호스트를 시작하고 표준 입력 (stdin) 및 표준 출력 (stdout)을 사용하여 통신합니다. 양방향으로 메시지를 보내는 데 동일한 형식이 사용됩니다. 각 메시지는 JSON, UTF-8 인코딩을 사용하여 직렬화 되며 기본 바이트 순서로 32 비트 메시지 길이가 앞에 옵니다. 기본 메시징 호스트에서 보내는 단일 메시지의 최대 크기는 1MB이며 주로 기본 애플리케이션의 오작동으로부터 Chrome을 보호합니다. 기본 메시징 호스트로 전송되는 메시지의 최대 크기는 4GB입니다.
기본 메시징 호스트에 대한 첫 번째 인수는 호출자의 출처이며 일반적으로 chrome-extension : // [허용 된 확장의 ID]입니다. 이를 통해 기본 메시징 호스트 매니페스트의 allowed_origins 키에 여러 확장이 지정된 경우 기본 메시징 호스트가 메시지 소스를 식별 할 수 있습니다. 경고 : Windows의 Chrome 54 및 이전 버전에서는 오리진이 첫 번째 매개 변수 대신 두 번째 매개 변수로 전달되었습니다.
runtime.connectNative를 사용하여 메시징 포트를 만들면 Chrome은 기본 메시징 호스트 프로세스를 시작하고 포트가 파괴 될 때까지 계속 실행합니다. 반면에 메시지 포트를 생성하지 않고 runtime.sendNativeMessage를 사용하여 메시지를 보내면 Chrome은 각 메시지에 대해 새로운 기본 메시지 호스트 프로세스를 시작합니다. 이 경우 호스트 프로세스에 의해 생성 된 첫 번째 메시지는 원래 요청에 대한 응답으로 처리됩니다. 즉, Chrome은 runtime.sendNativeMessage가 호출 될 때 지정된 응답 콜백에 메시지를 전달합니다. 이 경우 기본 메시징 호스트에서 생성 된 다른 모든 메시지는 무시됩니다.
Windows에서 기본 메시징 호스트는 또한 호출 크롬 기본 창에 대한 핸들이 있는 명령 줄 인수 (--parent-window = <decimal handle value>)를 전달받습니다. 이렇게 하면 기본 메시징 호스트가 올바르게 초점이 맞춰진 기본 UI 창을 만들 수 있습니다.
기본 애플리케이션에 연결
기본 응용 프로그램과 메시지를 주고 받는 것은 교차 확장 메시징과 매우 유사합니다. 가장 큰 차이점은 runtime.connectNative가 runtime.connect 대신 사용되고 runtime.sendNativeMessage가 runtime.sendMessage 대신 사용된다는 것입니다. 이러한 메서드는 "nativeMessaging"권한이 확장 프로그램의 매니페스트 파일에 선언 된 경우에만 사용할 수 있습니다.
다음 예제는 네이티브 메시징 호스트 com.my_company.my_application에 연결된 runtime.Port 개체를 만들고 해당 포트에서 메시지 수신을 시작하고 하나의 나가는 메시지를 보냅니다.
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에 쓰거나 통신 프로토콜을 위반하면 출력이 Chrome의 오류 로그에 기록됩니다. Linux 및 OS X에서는 명령 줄에서 Chrome을 시작하고 터미널에서 출력을 확인하여 이 로그에 쉽게 액세스 할 수 있습니다. Windows에서는 로깅 활성화 방법에 설명 된 대로 --enable-logging을 사용합니다.
다음은 문제 해결을 위한 몇 가지 오류 및 팁입니다.
Failed to start native messaging host.
파일을 실행할 수 있는 권한이 있는지 확인하십시오.
Invalid native messaging host name specified.
이름에 잘못된 문자가 있는지 확인하십시오. 소문자 영숫자, 밑줄 및 점만 허용됩니다. 이름은 점으로 시작하거나 끝날 수 없으며 점 뒤에 다른 점이 올 수 없습니다.
Native host has exited.
기본 메시징 호스트에 대한 파이프가 Chrome에서 메시지를 읽기 전에 끊어졌습니다. 이는 기본 메시징 호스트에서 시작되었을 가능성이 높습니다.
Specified native messaging host not found.
Native messaging host host name is not registered. (Windows-only)
Windows 레지스트리에서 원시 메시징 호스트를 찾을 수 없습니다. regedit를 사용하여 키가 실제로 생성되었고 기본 메시징 호스트 위치에 문서화 된 필수 형식과 일치하는지 다시 확인하십시오.
Access to the specified native messaging host is forbidden.
확장의 출처가 allowed_origins에 나열되어 있습니까?
Error when communicating with the native messaging host.
이것은 매우 일반적인 오류이며 원시 메시징 호스트에서 통신 프로토콜이 잘못 구현되었음을 나타냅니다.
예
examples /api/nativeMessaging 디렉토리에는 기본 메시징 호스트 역할을 하는 Python 스크립트와 통신하기 위해 기본 메시징을 사용하는 예제 애플리케이션이 포함되어 있습니다. 샘플 호스트의 디렉토리에는 기본 메시징 호스트를 설치 / 제거하는 스크립트도 포함되어 있습니다.
예제를 사용해 보려면 먼저 샘플 앱과 샘플 호스트를 다운로드하고 추출하십시오. install_host.bat (Windows) 또는 install_host.sh (Linux / OS X)를 실행하여 원시 메시징 호스트를 설치하십시오. 그런 다음 앱을 로드하고 앱과 상호 작용합니다. 완료되면 uninstall_host.bat 또는 uninstall_host.sh를 실행하여 원시 메시징 호스트를 등록 취소하십시오.
등록된 댓글이 없습니다.