已經使用CEF來呈現桌面程序界面大半年了,從來沒有寫過相關博文。發現網上的中文資料甚至英文已經無法滿足我的開發需求,不少問題只得自己探索。在此先謝過網絡上各位CEF使用開發博文的貢獻者,沒有你們我也難易快速入手。實在慚愧,由於精力有限,自己搗鼓出來的東西一直沒有貢獻出來。好吧,從今天開始,面朝大海,春暖花開。
原先公司的C++程序界面用GDI+來做,甚是麻煩。后來客戶想要類似豌豆莢那樣的風格,小清新。研究了下豌豆莢,發現它的界面八成是JavaScript,用CEF來嵌入Web頁面。此前也聽一朋友提過Chrome源碼之類雲雲,也知道現在不少桌面程序界面用JavaScript來做,開發效率高於C++。一直煩心於C++的界面開發,不安分的我也有極大的興趣去做新的嘗試,青春在於折騰。不過公司的程序一直以來采用的是WebBrowser控件,作為過渡,先在其上做界面。JavaScript邊學邊做,沒辦法,小公司,好多事情都要自己干,儼然成了一個全棧程序猿。
真正使用CEF的契機來自於一個棘手的問題。引入了一個JQuery圖表插件來顯示餅狀圖。但考慮到客戶的運行環境多元化,IE各個版本都有哦,甚至於IE6還占到20%以上。一次兼容性測試,發現該插件在IE8上死活用不了,調了兩天,搞不定。一怒之下,花了一周,替換成了CEF,為了解決C++與JavaScript互相調用產生死鎖,做了消息循環隊列,來進行異步調用,也大致理解NodeJs采用異步的妙處。此后種種日后再做分說。
當然CEF對於HTML5、CSS3以及JavaScript標准的支持確實很棒,可定制性也很高,不過從另一層面也因為它的靈活帶來了不少的麻煩。比如沒有IE那樣的右鍵菜單,要自己做,如果不去修改CEF的內部代碼,還需要去HOOK,但這些也着實是樂趣無窮。