據說,今年9月份開始,谷歌將在Chrome瀏覽器中全面禁用NPAPI插件,Chrome 45以后將無法再加載NPAPI插件,並推出了一種新的機制:擴展。
其實,如果把瀏覽器看作一塊畫布的話,NPAPI插件就像掛在畫布上的各種小飾品,而擴展更像拼接在畫布外小拼圖。無論是插件還是擴展,都是為了讓這副畫更符合用戶的期望。下面就只准備簡單介紹一下擴展和Native Message機制。
擴展安裝包
一個完整的擴展包,最終會一個.crx的壓縮文件包存在,使用zip的解壓文件可以直接打開的。
擴展安裝,共有兩種方式:
1)在Google APP Store中,找到相關的擴展,直接點擊添加
2)在Chrome瀏覽器的地址欄中,輸入chrome://extensions,打開擴展管理頁面;
再將crx文件,直接拖進去就好了。
如果擴展無法與瀏覽器搭上線,那么擴展就真的一個塊恰好放在瀏覽器邊上的一塊小拼圖了。
擴展與瀏覽器間的通信,可以有兩種形式:
1)短連接
發送消息:chrome.runtime.sendMessage
接收事件:chrome.runtime.onMessage.addListener
2)長連接
發送消息:var port = chrome.runtime.connect
port.postMessage
接收事件:port.onMessage.addListener
在某些時候,只通過擴展無法達到我們預期的效果,這個時候就需要引入Host端。從瀏覽器看下來,就是:瀏覽器<----->擴展<------>Host端。就是說:瀏覽器與擴展可以相互通信,擴展與Host端可以相互通信,但是Host端與瀏覽器無法直接通信。Chrome的示例給出的Demo,也是這樣的一個結構。
擴展與Host端的通信,就需要遵從Native Message機制的。為了實現Native Message機制通信,需要提前做些准備:
1)Host端、擴展
2)Host端的JSON文件,在這個文件中定義了Host應用的名稱,並為其綁定了擴展ID。只有在這里綁定過的,才是合法的,才是可以進行通信。
3)Host端的JSON文件,既然這么重要,那么瀏覽器要怎么樣才能找到這個文件呢?
Windows平台下,是寫在了注冊表中;Mac下則是放在了指定目錄下。
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
Mac平台:/Library/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json 或
~/Library/Application Support/Google/Chrome/NativeMessagingHosts/com.my_company.my_application.json
Native Message機制的通信方式,也有兩種形式:
1)短連接
發送消息:chrome.runtime.sendNativeMessage
2)常連接
發送消息:var port = chrome.runtime.connectNative
port.postMessage
接收事件:port.onMessage.addListener
port.onDisconnect.addListener
關於Native Message機制,需要注意
1)擴展與Host端的通信,其實理解可以為基於標准輸入輸出接口的進程通信。在Host端中,必須以二進制流的方式進行讀寫。
2)從擴展到Host端的,單條消息最大不超過4GB
從Host端到擴展的,單條消息最大不超過1MB
3) 每條消息,都一個4字節的頭,用來表示消息的長度。
Google的官方說明:
stdin
) and standard output (
stdout
). The same format is used to send messages in both directions
: each message is serialized using JSON, UTF-8 encoded and is preceded with 32-bit message length in native byte order
.
The maximum size of a single message from the native messaging host is 1 MB
, mainly to protect Chrome from misbehaving native applications.
The maximum size of the message sent to the native messaging host is 4 GB.
參考網址
NPAPI的介紹
https://zh.wikipedia.org/wiki/NPAPI
https://developer.chrome.com/extensions/npapi
某軟件給出的擴展安裝方式
http://honx.in/i/U7JbRYKo13vu6TsJ
中文文檔(比官方更新要慢些)