最近開發瀏覽器外掛程式有點上癮,先開發了一個FF(Firefox)瀏覽器外掛程式,後來又開發了一個Google瀏覽器的外掛程式,還是不覺得不過癮,這次要嘗試開發一個粗糙的IE瀏覽器外掛程式,最終實現在一鍵實現訂餐,一鍵取消訂餐操作。
凡事知道就好做了,只是這次走了些彎路。網上只要提到IE外掛程式開發的無不提到Com,BHO等等概念,為此我還下載了vs2010,安裝platform sdk,併到codeproject下載N個例子進行研究,雖然已經好幾年不用vs2010了,也不曾在寫com了,還好有點底子,基本能看懂,瞭解了下BHO的原理,同時瞭解了com的一些東西,也算有些收穫。不過越看越覺得我的不需要這麼麻煩,不需要BHO處理各種訊息狀態。我只需要在IE上增加一個按鈕,點擊這個按鈕,調用我寫的js觸發一個操作,並給出提示即可。走點彎路沒關係,下次也許用的到。
現在改變策略,既然要增加按鈕,觸發操作。那到internet explorer development上找協助就可以了,還真找到一篇文章,關於如何add menu items。仔細閱讀瞭解到,IE上的按鈕是通過增加註冊表項來完成了,隨即產生了兩個登錄機碼
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Extensions\{5D78A592-AA1A-4E6F-A808-9214B4A7222A}]"CLSID"="{5D78A592-AA1A-4E6F-A808-9214B4A7222A}""MenuText"="我要訂餐""MenuCustomize"="我要訂餐""MenuStatusBar"="我要訂餐""ClsidExtension"=""[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\InternetExplorer\Extensions\{BA6C7C63-9EFC-4DA1-B5D9-666A624F4831}]"CLSID"="{5D78A592-AA1A-4E6F-A808-9214B4A7222A}""MenuText"="取消訂餐""MenuCustomize"="取消訂餐""MenuStatusBar"="取消訂餐""ClsidExtension"=""
匯入登錄機碼,重啟IE,在工具中看到這兩個選項,我要訂飯和取消訂飯。只是點擊這兩個menu item沒有任何響應,原因是我們沒有給這兩個menu item增加增加響應事件。很簡單在登錄機碼中增加一個exec即可,我們要使用之前的js,那就需要寫一個頁面來執行這個js,比如寫如下代碼
<html><head><metahttp-equiv="Content-Type" content="text/html;charset=utf-8"><title>訂餐系統</title><meta name="keywords"content=""><scriptsrc="./dingcan.js"></script></head><bodyonload="DingCan.loginAndDingCan()"><span id="dcdingcan">正在訂餐中...</span></body>
如果我們的exec這樣寫
"Exec"="file:///D:/Program%20Files/dingcan/dingcan.html"
IE會重新開啟一個視窗,使用者體驗不好,這裡我們用點小技巧,把.html修改成.hta尾碼,整個事件清淨了,這樣設定之後,點擊按鈕後,是這個樣子的有點大,
在html增加如下代碼,設定視窗大小,
<scriptlanguage="javascript">window.resizeTo(200,100)</script>
這次是這樣的,完美了
Hta內容補充:HTA 全名為 HTMLApplication ( HTML 全名為 Hyper Text Markup Language ),HTA 為 HTML 應用程式。HTA格式的檔案不需要在瀏覽器中執行,windows可以直接執行此程式。更詳細的內容可以參考HTML Applications:
http://msdn.microsoft.com/en-us/library/ms536471%28v=VS.85%29.aspx
IE外掛程式實現的很猥瑣,只不過他實現了我要的功能。這幾個擴充都是皮毛,沒有什麼高深技術含量,只是希望對大家有所協助,也希望消除做瀏覽器延伸的不自信。
參考資料
Add menu items
http://msdn.microsoft.com/en-us/library/aa753591(v=VS.85).aspx
Internet Explorer Development
http://msdn.microsoft.com/en-us/library/bb188743.aspx