Chrome瀏覽器延伸開發系列之十四:本地訊息機制Native messaging

來源:互聯網
上載者:User

標籤:

通過將瀏覽器所在用戶端的本地應用註冊為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.002 [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位元組。

 

Chrome瀏覽器延伸開發系列之十四:本地訊息機制Native messaging

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.