Chrome瀏覽器擴展開發系列之十四:本地消息機制Native messaging


通過將瀏覽器所在客戶端的本地應用注冊為Chrome瀏覽器擴展的“本地消息主機(native messaging host)”,Chrome瀏覽器擴展還可以與客戶端本地應用之間收發消息。

客戶端的本地應用注冊為Chrome瀏覽器擴展的“本地消息主機”之后,Chrome瀏覽器會在獨立的進程中啟動該本地應用,並通過標准輸入/輸出流(stdin/stdout)進行消息通信。

1)      本地應用的配置文件的內容

本地應用要能夠成為“本地消息主機”,必須有一個manifest.json配置文件(文件名任意),該文件是一個有效的JSON文件,示例如下。

1 {
2   "name": "com.my_company.my_application",
3   "description": "My Application",
4   "path": "C:\\Program Files\\My Application\\chrome_native_messaging_host.exe",
5   "type": "stdio",
6   "allowed_origins": [
7     "chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"
8   ]
9 }

其中的屬性含義及用法如下。

屬性名

含義

name

標識名稱。

只能由小寫字母、數字、_和.組成;首尾不能是.且不能有. 連續出現

description

描述

path

本地應用的完整路徑,Linux和OS X上必須是絕對路徑,Windows上可以是基於配置文件所在位置的相對路徑

type

與本地消息主機進行通信的接口類型。

目前只支持stdio,表示Chrome瀏覽器通過stdin和stdout與本地消息主機通信

allowed_origins

授權與本地消息主機進行通信的Chrome瀏覽器擴展。

不能使用通配符

 

2)      本地應用的配置文件的路徑

配置文件的具體位置與操作系統有關。在Windows操作系統上,配置文件可以位於任何路徑,只需在安裝本地應用時修改注冊表指明其位置即可。

創建key:

HKEY_LOCAL_MACHINE\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application

HKEY_CURRENT_USER\SOFTWARE\Google\Chrome\NativeMessagingHosts\com.my_company.my_application

設置默認值Default為配置文件所在的絕對路徑:

C:\path\to\nmh-manifest.json

 

也可以直接創建注冊表文件.reg如下,安裝時執行即可:

1 Windows Registry Editor Version 5.00
2 [HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application]
3 @="C:\\path\\to\\nmh-manifest.json"

 

對於Linux和OS X操作系統,本地應用的配置文件的位置首先與安裝的Chrome瀏覽器(Google Chrome或Chromium)有關。其次,如果是系統級別的本地應用,其配置文件應該位於固定位置。如果是用戶級別的本地應用,則其配置文件位於用戶主目錄下的名為NativeMessagingHosts的子目錄中。具體位置如下表所示。

 

Google Chrome

Chromium

Linux系統應用

/etc/opt/chrome/native-messaging-hosts/com.my_company.my_application.json

/etc/chromium/native-messaging-hosts/com.my_company.my_application.json

Linux用戶應用

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

~/.config/chromium/NativeMessagingHosts/com.my_company.my_application.json

OS X系統應用

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

/Library/Application Support/Chromium/NativeMessagingHosts/com.my_company.my_application.json

OS X用戶應用

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

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

 

3)      Chrome瀏覽器擴展與本地應用之間的消息通信

Chrome瀏覽器擴展要與客戶端本地應用進行通信,首先必須在Chrome瀏覽器擴展的manifest.json配置文件中聲明權限如下:

1 {
2   "permissions": [
3     "nativeMessaging"
4   ],
5 }

Chrome瀏覽器擴展與客戶端本地應用之間的消息通信非常類似於不同Chrome瀏覽器擴展之間的通信,示例如下。

在Chrome瀏覽器擴展中創建端口,監聽來自本地應用的多個消息:

 1 var port = chrome.runtime.connectNative('com.my_company.my_application');
 2  //參數為本地應用在其配置文件中聲明的標識名稱
 3 
 4 port.onMessage.addListener(function(msg) {//收到消息后的處理函數
 5   console.log("Received" + msg);
 6 });
 7 port.onDisconnect.addListener(function() {
 8   console.log("Disconnected");
 9 });
10 
11 port.postMessage({ text: "Hello, my_application" }); //發送一條消息

在Chrome瀏覽器擴展中也可以不打開端口,發送一次性消息如下:

1 chrome.runtime.sendNativeMessage(
2   'com.my_company.my_application',
3   { text: "Hello" },
4   function(response) {//收到返回消息后的處理函數
5     console.log("Received " + response);
6   });

如果Chrome瀏覽器擴展在調用本地應用時發生異常,將會在stderr輸出錯誤信息。如果因違反了本地消息的協議約束而出錯,將會在Chrome瀏覽器的錯誤日志文件輸出錯誤信息。Linux和OS X操作系統上,通過命令行啟動Chrome瀏覽器,就可以在命令行窗口看到錯誤信息。Windows操作系統上,啟動Chrome瀏覽器時帶上--enable-logging參數(在chrome.exe的右鍵屬性菜單中,General面板頂部的文本框中,chrome.exe后面直接跟上參數即可),就可以在Chrome瀏覽器的日志文件中看到錯誤信息。

 

4)      本地消息的協議約束

客戶端的本地應用注冊為Chrome瀏覽器擴展的“本地消息主機”之后,Chrome瀏覽器會在獨立的進程中啟動該本地應用,並通過標准輸入/輸出流(stdin/stdout)進行消息通信。

Chrome瀏覽器擴展與客戶端的本地應用之間的雙向通信采用消息機制,該消息以JSON格式,UTF-8編碼,帶32位(操作系統本地字節序)的消息長度作為前綴。從本地應用發送到Chrome瀏覽器擴展的消息,最大尺寸是1M字節。從Chrome瀏覽器擴展發送到本地應用的消息,最大尺寸是4G字節。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM