1 瀏覽器開發(fā)內(nèi)核討論
為何市場(chǎng)上的瀏覽器多數(shù)基于chromium開源代碼而不是cef開發(fā)诺核,基于此問題展開討論罢维,后續(xù)思考如下函荣。
2 chromium和cef的區(qū)別和聯(lián)系
chromium是谷歌主導(dǎo)的瀏覽器開源項(xiàng)目唾戚,基于chromium可以方便快捷定制一款瀏覽器卿操,國(guó)內(nèi)外多數(shù)瀏覽器也基于此開發(fā)警检。
Cef是chromium項(xiàng)目的一個(gè)分支,抽離webkite和內(nèi)核層硬纤,提供content層上的API接口解滓,把復(fù)雜的底層接口進(jìn)行封裝,更加友好的給用戶使用筝家,多數(shù)用于客戶端的開發(fā)洼裤,通過內(nèi)置頁面實(shí)現(xiàn)快速開發(fā)客戶端界面的效果。當(dāng)前釘釘溪王、企業(yè)微信腮鞍、VSCode等多數(shù)客戶端都使用此框架開發(fā)。
他們都可以渲染網(wǎng)頁莹菱,都是開源框架移国,chromium是瀏覽器的開源應(yīng)用,針對(duì)瀏覽器的常用功能做了大量工作道伟,cef抽離渲染部分迹缀,應(yīng)用在客戶端的內(nèi)嵌網(wǎng)頁場(chǎng)景使碾,閹割了部分功能,方便用戶學(xué)習(xí)和使用祝懂。
3 瀏覽器能否基于cef的開發(fā)
3.1 如果能有哪些優(yōu)勢(shì)票摇,有哪些問題
如果cef能滿足日常的網(wǎng)頁瀏覽,方便用戶使用砚蓬,基于此假設(shè)進(jìn)行如下論證矢门。
1、可以更加快速的上手瀏覽器開發(fā)灰蛙,原因:cef接口隔離比較友好祟剔,提供少量API即可實(shí)現(xiàn)滿足渲染一個(gè)頁面
2、快速實(shí)現(xiàn)內(nèi)核升級(jí)摩梧,原因:隔離比較好物延,cef本身會(huì)把底層內(nèi)核隔離出來一套接口,把上層應(yīng)用給閹割掉障本。
3.2 需要考慮的問題點(diǎn)
1教届、用戶體驗(yàn)至少和V68線上一致
2、支持的瀏覽器功能要和V68一致
4 問題難點(diǎn)
如果要實(shí)現(xiàn)一個(gè)包含常用功能的瀏覽器驾霜,需要先思考如何解決如下問題。
因?yàn)閏ef會(huì)閹割掉大多數(shù)應(yīng)用層功能如:UI买置、Chrome粪糙、Content等,導(dǎo)致當(dāng)前瀏覽器常用功能在cef中需要自己實(shí)現(xiàn)忿项。
4.1 如下技術(shù)點(diǎn)cef當(dāng)前不支持蓉冈,需要思考如何實(shí)現(xiàn)
1、如何實(shí)現(xiàn)UI框架轩触,支持各類UI展示寞酿、右鍵菜單、橫幅脱柱、氣泡伐弹,此UI框架涉及最廣,而且要求比較對(duì)性能和擴(kuò)展性榨为、開發(fā)友好等都有較高要求惨好。
2、如何支持地址欄随闺,實(shí)現(xiàn)當(dāng)前瀏覽器的地址欄各個(gè)功能日川,如聯(lián)想提示、歷史記錄聯(lián)想矩乐、搜索文字聯(lián)想龄句、收藏聯(lián)想、地址欄安全標(biāo)識(shí)等等
3、如何支持收藏分歇,收藏歷史透葛、收藏搜索、收藏同步卿樱、收藏本地保存和收藏界面展示
4僚害、如何支持開發(fā)這模式,比如:F12等各類HTML5的調(diào)試繁调,此功能在cef可以通過開接口實(shí)現(xiàn)F12萨蚕,cef本身支持一部分開發(fā)這模式,默認(rèn)禁掉蹄胰,需要重新捕獲消息
5岳遥、如何支持各類內(nèi)置頁,頁面的JS擴(kuò)展接口裕寨、主頁設(shè)置浩蓉、各類選項(xiàng)設(shè)置頁面,這個(gè)頁面比較多幾十個(gè)宾袜,是chrome瀏覽器功能入口
6捻艳、如何支持插件功能,插件拖進(jìn)庆猫、卸載和運(yùn)行等
7认轨、如何標(biāo)簽的管理,參考chrome實(shí)現(xiàn)各類標(biāo)簽功能月培,標(biāo)簽拖拽如:標(biāo)簽拖出新開一個(gè)瀏覽器嘁字,拖進(jìn)可以合并2個(gè)瀏覽器窗口等
8、如何實(shí)現(xiàn)瀏覽器的同步機(jī)制
9杉畜、如何實(shí)現(xiàn)瀏覽器翻譯功能
10纪蜒、如何實(shí)現(xiàn)下載模塊、多窗口模塊此叠、恢復(fù)列表
11纯续、如何實(shí)現(xiàn)鼠標(biāo)手勢(shì)、Favicon模塊
12拌蜘、UA功能杆烁、新標(biāo)簽頁
13、待補(bǔ)充