實現chrome擴展啟動本地進程 - 補充

版權聲明:本文為博主原創文章,未經博主允許不得轉載。
示例 主要包含如下部分
程序源碼在網盤(Chrome Plugin目錄下的Demo.rar):
??http://pan.baidu.com/s/1hcVuQ
?
效果圖:
?
?
部分代碼:
?
?
- {??
- ?????//??Extension?ID:?ndnigonbfjhpjlcabmadmkpdcfomenlp??
- ?????"manifest_version":?2,??
- ??
- ?????"name":?"Invoke?Native?Application",??
- ?????"description":?"example",??
- ?????"version":?"1.0",??
- ??
- ?????"browser_action":?{??
- ??????????"default_icon"?:?"icon.png",????
- ??????????"default_popup":?"popup.html"???//定義了點擊擴展后顯示的頁面??
- ?????},??
- ?????"permissions":?[??
- ?????????"nativeMessaging"?????//定義權限,需要和本地應用程序通信??
- ??]??
- }??
?
?
- function?updateResult(obj,?state){??
- ?????document.getElementById(obj).innerHTML?=?state;??
- }??
- function?invoke(){??
- ?????//hostName為注冊表上項的名稱??
- ?????var?hostName?=?"com.google.chrome.demo";??
- ????//啟動本地應用程序??
- ?????var?port?=?chrome.runtime.connectNative(hostName);??
- ?????updateResult("result1",?"invoke..");??
- }??
- ??
- //為button1添加監聽事件??
- document.addEventListener('DOMContentLoaded',?function()?{??
- ??document.querySelector('#button1').addEventListener(??
- ??????'click',?invoke);???
- });??
- ??
- com.google.chrome.demo-win.json??
- ??
- {??
- ??"name":?"com.google.chrome.demo",??
- ??"description":?"Chrome?Native?Messaging?API?Example?Host",??
- ?//path?必須是絕對路徑,指向要啟動的程序??
- ??"path":?"D:\\Work\\Chrome?plugin\\Native?Messaging?Example\\Demo\\native_cmd.bat",??
- ??"type":?"stdio",??
- ??"allowed_origins":?[??
- ????"chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"??
- ??]??
- }??
- {??
- ??"name":?"com.google.chrome.demo",??
- ??"description":?"Chrome?Native?Messaging?API?Example?Host",??
- ?//path?必須是絕對路徑,指向要啟動的程序??
- ??"path":?"D:\\Work\\Chrome?plugin\\Native?Messaging?Example\\Demo\\native_cmd.bat",??
- ??"type":?"stdio",??
- ??"allowed_origins":?[??
- ????"chrome-extension://niekdnkneilndiimkikogmplndpcfknp/"??
- ??]??
- }??
[HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.demo]
@="D:\\Work\\Chrome plugin\\Native Messaging Example\\Demo\\com.google.chrome.demo-win.json"
======================2016.2.15 補充=============================================
? 之前有博友私信我關于不能啟動的問題,這里是我疏忽了一個挺重要的步驟,就是權限問題。
在allowed_origins下的chrome-extension表示允許的插件。這串字母很重要,要和你安裝的ID一致。如下,這個插件為hnaekmhaniojodkaageacnjfldljhiek,那么相對于安裝的ID也是必須一致。
?
- "allowed_origins":?[??
- ???"chrome-extension://hnaekmhaniojodkaageacnjfldljhiek/"??
- ?]??
?
這里涉及了插件打包的問題,順便也提一下。
如下,選擇打包擴展程序,其中根目錄為插件所在位置,這樣打包后會生成兩個文件,一個pem密鑰文件,另一個為crx安裝程序。安裝后可以看到插件的ID,然后復制下來到填上,再將crx安裝程序刪除,重新來打包一次,但是這一次下面的私有密鑰文件要選擇剛剛生成的。這樣ID就對應了。
?
補充實現的由來:
這里對于當時我接到要寫一個chrome插件任務的時候,那時候首次接觸插件的時候,解決思路是先收集資料,然后確定采用Native Messaging方式來實現時,就查看相關文檔以及官方Demo,然后再研究迅雷的插件,看看迅雷是如何調用起來的(不是研究源碼,是看怎么關聯起來的,如注冊表),這個過程并不需要花多少時間,一周左右的時間。