
背后的歷史故事
說起我的瀏覽器,那是2015年春天剛過完沒多久,正值5月底,依稀還記得那時(shí)我是住在民生路的羽北小區(qū),因?yàn)槟菚r(shí)剛搬去新房子不久,剛在淘寶上買的墻紙與壁畫貼上不久,一個(gè)人在一個(gè)還算蠻溫馨房間里,帶著欣慰的心情獨(dú)自坐一臺(tái)山寨的iMac前,思索著接下來打算做點(diǎn)什么。
記得當(dāng)時(shí)到公司有大半年了,做的不是瀏覽器項(xiàng)目,后來有l(wèi)eader說后期會(huì)讓我做瀏覽器,所以當(dāng)時(shí)就開始研究起了瀏覽器。做瀏覽器,當(dāng)時(shí)有兩種核心組件可并行的用,市面上主流的都是基于UIWebView,因?yàn)榭由伲渤墒煊昧撕芏嗄炅?。部分瀏覽器從iOS8開始采用WKWebView核心,因?yàn)橛肳KWebView核心加載網(wǎng)頁比UIWebView核心快太多。但WKWebView當(dāng)時(shí)作為一個(gè)新事物坑還是比較多的。
2014年10月那次蘋果推出了iOS8,對我來說iOS8有兩個(gè)非常重要的新東西,一個(gè)是WKWebView,一個(gè)是Keyboard Extension??尚业氖俏叶冀佑|了,而且應(yīng)用它們都做了優(yōu)秀的App,而我的瀏覽器就主要基于這個(gè)WKWebView構(gòu)建的。
我的瀏覽器前期也兼容了兩種核心,其實(shí)當(dāng)時(shí)我并沒有想要自己做一款瀏覽器的想法,只是為以研究做瀏覽器,比較好做法是自己寫一個(gè)實(shí)現(xiàn)一遍。心想雖然這樣會(huì)比較累,但這樣對我來說成效是最大的。因?yàn)楫?dāng)前公司的瀏覽器項(xiàng)目確實(shí)有點(diǎn)臃腫,依賴于之上的業(yè)務(wù)也多。所以懷著對自己的信任,為了技術(shù)熱情與理想,重新架構(gòu)設(shè)計(jì),從零開始重新寫一個(gè)輕量的Demo瀏覽器。
當(dāng)時(shí)重新寫時(shí),首先就用UIWebView做了一遍,順便熟悉了WebViewJavascriptBridge的用法,發(fā)現(xiàn)沒有想象的那么困難,因?yàn)槟茉赨IWebView上可做的事情挺多的,都還挺順暢的,也不麻煩,很快就實(shí)現(xiàn)了一個(gè)基于UIWebView的瀏覽器,主要是支持多窗口,有歷史與書簽管理。
后來參考了github諸多案例后,就想做一個(gè)既兼容UIWebView又兼容WKWebView的WebView組件,最后實(shí)現(xiàn)下來,發(fā)現(xiàn)總還是免不了邏輯和代碼變得更復(fù)雜了,變得更加難以維護(hù),問題復(fù)雜化了,后面不斷的功能變更與版本迭代時(shí)問題太多,得不嘗失。做一個(gè)同時(shí)兼容UIWebView和WKWebView的XXWebView組件不合理,成本太高,現(xiàn)在我github的MyBrowser的master分支上還保留著,只是沒維護(hù)了。
不知道什么時(shí)候,可能是熟悉WKWebView后,了解他更多的特性與優(yōu)點(diǎn)后,就比較排斥再用UIWebView了。所以就想著把之前做的半拉子的Demo瀏覽器進(jìn)一步優(yōu)化完善,直至后來新開git分支完全用WKWebView實(shí)現(xiàn),把與UIWebView相關(guān)代碼與邏輯都刪除了。終于解脫了,至少我自己有一個(gè)App不用再在為了UIWebView與WKWebView之間的兼容性來回折騰了。
最后再解釋一下這個(gè)瀏覽器為什么叫『我的瀏覽器』,因?yàn)楫?dāng)時(shí)我做它的時(shí)候,想到的只是給自己做的用的,一時(shí)沒想到特別好的名字,就叫了這個(gè)名字,以突顯這是我的瀏覽器,我的個(gè)性化瀏覽器,那時(shí)多少有一點(diǎn)裝B的意思。
好了,廢話已經(jīng)寫了很多了,下面具體介紹我的瀏覽器吧。
先上幾張瀏覽器的效果圖:
基本功能介紹
我的瀏覽器的特點(diǎn)是極簡、極輕、可自定義。功能多又能體積小,一個(gè)重要原因是基本上不添加第3方庫,所有的功能模塊基本都用系統(tǒng)原生支持的或是自己親手編寫實(shí)現(xiàn)。所以安裝包在5M以內(nèi),即便是3x(3x圖大)屏幕的設(shè)備安裝包也在8M左右。
自動(dòng)全屏
自動(dòng)全屏功能讓我們在看瀏覽內(nèi)容時(shí)能更加全神貫注于內(nèi)容本身;我的瀏覽器在向上滑動(dòng)內(nèi)容時(shí)會(huì)自動(dòng)隱藏頂部導(dǎo)航條與底部工具欄,從而為主體內(nèi)容預(yù)留出更多展現(xiàn)空間。

夜間模式 & 無圖模式
開啟夜間模式可有效降低屏幕亮度保護(hù)我們的眼睛;

無圖模式可以屏蔽掉網(wǎng)頁中的圖片;

廣告攔截
廣告攔截讓網(wǎng)頁更干凈;頁面加載更加迅速;
多窗口、書簽管理
多窗口、書簽管理、歷史記錄、清除痕跡作為一款瀏覽器必有的功能,所以我的瀏覽器也必須加上了。
掃描二維碼
每想到Safari沒有掃描二維碼的功能,就感覺這是一個(gè)極大的缺陷,瀏覽器沒有掃描二維碼太不方便了。
網(wǎng)頁截圖
用我的瀏覽器打開網(wǎng)頁后,雙指長按頁面可以對打開的網(wǎng)頁進(jìn)行選取區(qū)域截圖,并可以進(jìn)行分享保存。

網(wǎng)頁導(dǎo)出成PDF
有時(shí)候我們想在手機(jī)保存我們?yōu)g覽的網(wǎng)頁,并且適配手機(jī)屏幕,還是一件挺麻煩的事情,而我的瀏覽器就可以輕松的把瀏覽過的網(wǎng)頁導(dǎo)出成pdf文件。

高級功能介紹
高級功能對于專業(yè)的朋友來說,可做的事情就有很多了,可以更大程度上玩轉(zhuǎn)我的瀏覽器。
強(qiáng)大的ShareExtension
我的瀏覽器的ShareExtension之強(qiáng)大,不但可以將其他App的網(wǎng)址鏈接用我的瀏覽器打開,還支持其他任何格式文件導(dǎo)入到我的瀏覽器,使用我的瀏覽器打開。
比如可以導(dǎo)入音視頻文件放到內(nèi)置的站點(diǎn)上,實(shí)現(xiàn)手機(jī)上在線播放或分享文件給局域網(wǎng)內(nèi)的好友。

又比如可以把微信或QQ收到的word、excel、ppt、key或pdf等文件用其他應(yīng)用程序打開,選擇我的瀏覽器導(dǎo)入,放到內(nèi)置的站點(diǎn)上供自己或局域網(wǎng)內(nèi)的好友在線瀏覽下載。

自定義首頁配置
我的瀏覽器的配置文件都在web容器的Config目錄下,用戶可以修改HomeContent.json文件內(nèi)容來自定義瀏覽器首頁。打開我的瀏覽器,點(diǎn)擊默認(rèn)首頁上的『Web Server』,即可打開Web容器的主目錄,主目錄下默認(rèn)有一個(gè)Config文件夾。
首頁的展示的數(shù)據(jù)來源于HomeContent.json,每一項(xiàng)UI對應(yīng)于HomeContent.json的數(shù)據(jù)項(xiàng),類型支持4種,分別為:TextIcon,Text,Search,WebServer。
通過Web DAV或者Web Uploader上傳自定義的HomeContent.json文件替換掉Config目錄中老的Homecontent.json文件即可自定義瀏覽器首頁。(注意這里要確保json文件格式正確哦)

自定義廣告攔截的規(guī)則
我們可以在web容器的Config目錄下修改AdblockRules.txt文件內(nèi)容來添加或修改廣告攔截的規(guī)則,修改規(guī)則后重啟瀏覽器即可馬上生效;建意攔截規(guī)則不要添加太多,超過3萬條就會(huì)影響網(wǎng)頁的加載速度或部分網(wǎng)頁的會(huì)被誤攔截。
完整版的EasyList中國區(qū)規(guī)則列表 https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt
撰寫 Adblock Plus 過濾規(guī)則,可參考:https://adblockplus.org/filters
內(nèi)置靜態(tài)WebServer
默認(rèn)的首頁有個(gè)打開WebServer的入口,那個(gè)『Web Server』鏈接項(xiàng)就是了。內(nèi)置靜態(tài)的WebServer,支持在手機(jī)上搭建簡單的靜態(tài)web站點(diǎn)。我們可向Web容器上傳或?qū)胛募蛭募A。
內(nèi)置的Web Uploader
內(nèi)置的Web Uploader 可以直接在瀏覽器里管理Web容器里的文件,包括上傳文件到Web容器,或移動(dòng)、刪除或新建文件夾等操作。
使用Web Uploader,我們可以在手機(jī)上添加、移動(dòng)、刪除及重名命文件夾,也可以上傳、移動(dòng)、刪除及重命名文件。

內(nèi)置Web DAV
想必用過FTP的朋友應(yīng)該也聽說過Web DAV,與FTP的功能類似。通過Web DAV,可以更方便快捷實(shí)現(xiàn)從電腦上傳或下載文件到web容器。我的瀏覽器的WebDAV啟動(dòng)后,默認(rèn)端口是8081。
Windows上WebDAV客戶端可以使用NetDrive、AnyClient,Mac上可以使用Transmit。下面來一張?jiān)贛ac上使用Transmit 通過 WebDAV 連接到手機(jī)上的『我的瀏覽器』的Web容器目錄的操作演示。

關(guān)注微信
