有了基礎篇的學習,我們就直奔主題,來完成本次c#和插件的交互之旅。
在此之前,我稍微回顧下基礎知識。
chrome插件涉及到的js類型:
1、background.js 它的生命周期最長,直到瀏覽器關閉。它相當於插件的后台。
2、content.js 它注入到頁面中,相當於頁面的一部分,和頁面中原始js共享Dom,但是不能直接相互調用。
3、popup.js 彈出頁面,和background比較像,能夠訪問chrome中的大部分api。它的生命周期比較短,popup頁面關閉的時候,它就結束了。
我們來分析下,完成這個插件,必須做的事情:
1、需要獲取頁面內容、地址、cookie
2、把這些信息傳遞到本地的c#程序
3、通過右鍵和popup兩種方式發起調用
我們需要掌握 nativeMessaging,才能夠與客戶端通訊。chrome插件和客戶端發送json字符串,采用 stdio (標准輸入輸出流)。見配置文件 com.google.chrome.demo-win.json:
1 { 2 "name": "com.google.chrome.demo", 3 "description": "Chrome Native Messaging API Example Host", 4 //"path":"c:\\MyApp.exe", 5 "path": "D:\\mywork\\notefirst\\NoteFirst2.0\\Clients\\UI\\bin\\x86\\Debug\\HtmlExtractorForChrome.exe", 6 "type": "stdio", 7 "allowed_origins": [ 8 "chrome-extension://bipggjnbpccmcdnkokjndjofbhijhcol/" 9 ] 10 }
注意path的路徑當中需要雙斜杠,否則會報錯:
第2行的name名稱來自注冊表項:
HKEY_CURRENT_USER\Software\Google\Chrome\NativeMessagingHosts\com.google.chrome.demo,它的值指向配置:E:\BaiduYunDownload\Demo\com.google.chrome.demo-win.json
第8行,chrome-extension指的是插件的Id
注意,選中開發者模式,才能看到Id。
再看看插件的配置:
1 { 2 // Extension ID: ndnigonbfjhpjlcabmadmkpdcfomenlp 3 "manifest_version": 2, 4 5 "name": "Invoke Native Application", 6 "description": "example", 7 "version": "1.0", 8 9 "background": { 10 "scripts": ["background.js"] 11 }, 12 13 "browser_action": { 14 "default_icon" : "icon.png", 15 "default_popup": "popup.html" 16 }, 17 18 "content_scripts": [ 19 { 20 "js": ["content_script.js"], 21 "matches": [ 22 "http://*/*", 23 "https://*/*" 24 ], 25 26 "run_at": "document_start" 27 } 28 ], 29 30 "permissions": ["nativeMessaging","contextMenus","tabs"] 31 }
注意第30行的permissions權限配置,意思是我們需要訪問本地程序、右鍵菜單、瀏覽器tabs。
這篇我們先分析了將要做的事情以及弄好配置等等外圍事務,下一篇我們着重講代碼的具體實現。