Google Chrome Native Messaging开发实录(一)背景介绍
最近接手了一個針對Google Chrome的需求,最終是使用Native Messaging來實現的。通過這個連載,將把本次開發從方案選定到編碼的全部過程進行完整的回顧,并記錄開發過程中踩過的各種坑,給首次接觸或希望使用chrome插件/擴展技術的朋友,提供一些經驗參考。
需求概要是這樣,項目本身是一個在線辦公的web應用,其中有一個功能模塊是刷卡考勤,原來的這個功能僅支持IE瀏覽器,具體是在某個頁面上,通過IE的AtiveX控件,顯示出連接在客戶機上的IDR讀卡器上識別到的卡片的卡號。新的需求要求這個功能要支持Chrome瀏覽器。
分析一下,目標是讓Chrome瀏覽器通過某個途徑,能夠達到和在IE瀏覽器上同樣的效果,而已知的條件是磁卡機廠商提供的AtiveX控件。由于這個項目中的磁卡機款式比較老,并不像現在市面上能買到的免驅的設備,電腦通過usb連接馬上就識別為HID Device,因此借助驅動和磁卡讀卡器通訊是避免不了的。另一個技術關鍵點是,Chrome本身提供的硬件訪問相關API也無法直接和讀卡器通訊,那么剩下可選的方案逃不出NaCl和Native Messaging。
接下來先看看NaCl,它確實是一項深受開發者喜愛的技術,在Google大力推動下,ppapi取代npapi成為Chrome唯一的核心插件方式,以往開發過的c/c++的組件和應用盡皆得以保留和web頁面交互,它的發布形式也相當豐富,nacl/pnacl甚至都可以通過web服務器獲取,和自己的web站點一起部署。遺憾的是,我手上可用的磁卡機的訪問組件,是隨ActiveX控件一起打包的win32下開發的x86類庫,更要命的是沒有.h頭文件和.lib庫,只有一個dll動態庫,也就是說,我是需要win32 api的,使用LoadLibrary和GetProcAddress才能調用到dll庫中需要的函數,結合NaCl SDK,最合適的方案應該是pepper plugin。但我最后否定了這個方案,原因是Chrome上注冊pepper plugin是通過命令行的,而且不是永久生效的,也許是我并沒有找到正確的方法,在時間j有限的前提下,我沒有深入下去。
NaCl
?
Pepper Plugin
?
所以,最后只有祭出Native Messaging這個大殺器了,它的原理很好理解,Chrome的沙箱開辟了一個跨進程通訊的通道,允許Chrome Extension擴展能發送消息給本地任何一個支持stdio的進程,并從這個進程獲得響應消息。這個方案對Chrome來說,需要開發一個擴展,對本地來說,需要一個控制臺程序或windows service,在時間和難度的考慮下,這就可以接受了。
?
Native Messaging
?
后續我將分成幾篇分別展示各個部分開發的內容,在本篇結尾,我分享幾個資源 ,是我在嘗試NaCl方案時,收集到的還不錯的資料,因為我也是頭一回接觸這個,所以類似開發指南和介紹的內容是相當難得的。
1.Google I/O 2012 - Native Client LIVE
2.CEF和PPAPI
3.Google I/O 2012 - Life of a Native Client Instr
轉載于:https://www.cnblogs.com/BeanHsiang/p/6580917.html
總結
以上是生活随笔為你收集整理的Google Chrome Native Messaging开发实录(一)背景介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ 1396:识别子串 SA+树状
- 下一篇: Java的值传递和引用值传递的区别