背后的歷史故事
說起我的瀏覽器崎弃,那是2015年春天剛過完沒多久,正值5月底疾瓮,依稀還記得那時我是住在民生路的羽北小區(qū)脖镀,因?yàn)槟菚r剛搬去新房子不久,剛在淘寶上買的墻紙與壁畫貼上不久狼电,一個人在一個還算蠻溫馨房間里蜒灰,帶著欣慰的心情獨(dú)自坐一臺山寨的iMac前,思索著接下來打算做點(diǎn)什么肩碟。
記得當(dāng)時到公司有大半年了强窖,做的不是瀏覽器項(xiàng)目,后來有l(wèi)eader說后期會讓我做瀏覽器削祈,所以當(dāng)時就開始研究起了瀏覽器翅溺。做瀏覽器,當(dāng)時有兩種核心組件可并行的用,市面上主流的都是基于UIWebView未巫,因?yàn)榭由倭耍渤墒煊昧撕芏嗄炅恕2糠譃g覽器從iOS8開始采用WKWebView核心叙凡,因?yàn)橛肳KWebView核心加載網(wǎng)頁比UIWebView核心快太多劈伴。但WKWebView當(dāng)時作為一個新事物坑還是比較多的。
2014年10月那次蘋果推出了iOS8握爷,對我來說iOS8有兩個非常重要的新東西跛璧,一個是WKWebView,一個是Keyboard Extension新啼∽烦牵可幸的是我都接觸了,而且應(yīng)用它們都做了優(yōu)秀的App燥撞,而我的瀏覽器就主要基于這個WKWebView構(gòu)建的座柱。
我的瀏覽器前期也兼容了兩種核心,其實(shí)當(dāng)時我并沒有想要自己做一款瀏覽器的想法物舒,只是為以研究做瀏覽器色洞,比較好做法是自己寫一個實(shí)現(xiàn)一遍。心想雖然這樣會比較累冠胯,但這樣對我來說成效是最大的火诸。因?yàn)楫?dāng)前公司的瀏覽器項(xiàng)目確實(shí)有點(diǎn)臃腫,依賴于之上的業(yè)務(wù)也多荠察。所以懷著對自己的信任园细,為了技術(shù)熱情與理想割以,重新架構(gòu)設(shè)計墩崩,從零開始重新寫一個輕量的Demo瀏覽器典唇。
當(dāng)時重新寫時,首先就用UIWebView做了一遍焕盟,順便熟悉了WebViewJavascriptBridge的用法廷雅,發(fā)現(xiàn)沒有想象的那么困難,因?yàn)槟茉赨IWebView上可做的事情挺多的京髓,都還挺順暢的,也不麻煩商架,很快就實(shí)現(xiàn)了一個基于UIWebView的瀏覽器堰怨,主要是支持多窗口,有歷史與書簽管理蛇摸。
后來參考了github諸多案例后备图,就想做一個既兼容UIWebView又兼容WKWebView的WebView組件,最后實(shí)現(xiàn)下來,發(fā)現(xiàn)總還是免不了邏輯和代碼變得更復(fù)雜了揽涮,變得更加難以維護(hù)抠藕,問題復(fù)雜化了,后面不斷的功能變更與版本迭代時問題太多蒋困,得不嘗失盾似。做一個同時兼容UIWebView和WKWebView的XXWebView組件不合理,成本太高雪标,現(xiàn)在我github的MyBrowser的master分支上還保留著零院,只是沒維護(hù)了。
不知道什么時候村刨,可能是熟悉WKWebView后告抄,了解他更多的特性與優(yōu)點(diǎn)后,就比較排斥再用UIWebView了嵌牺。所以就想著把之前做的半拉子的Demo瀏覽器進(jìn)一步優(yōu)化完善打洼,直至后來新開git分支完全用WKWebView實(shí)現(xiàn),把與UIWebView相關(guān)代碼與邏輯都刪除了逆粹。終于解脫了募疮,至少我自己有一個App不用再在為了UIWebView與WKWebView之間的兼容性來回折騰了。
最后再解釋一下這個瀏覽器為什么叫『我的瀏覽器』枯饿,因?yàn)楫?dāng)時我做它的時候酝锅,想到的只是給自己做的用的,一時沒想到特別好的名字奢方,就叫了這個名字搔扁,以突顯這是我的瀏覽器,我的個性化瀏覽器蟋字,那時多少有一點(diǎn)裝B的意思稿蹲。
好了,廢話已經(jīng)寫了很多了鹊奖,下面具體介紹我的瀏覽器吧苛聘。
先上幾張瀏覽器的效果圖:
基本功能介紹
我的瀏覽器的特點(diǎn)是極簡、極輕忠聚、可自定義设哗。功能多又能體積小,一個重要原因是基本上不添加第3方庫两蟀,所有的功能模塊基本都用系統(tǒng)原生支持的或是自己親手編寫實(shí)現(xiàn)网梢。所以安裝包在5M以內(nèi),即便是3x(3x圖大)屏幕的設(shè)備安裝包也在8M左右赂毯。
自動全屏
自動全屏功能讓我們在看瀏覽內(nèi)容時能更加全神貫注于內(nèi)容本身战虏;我的瀏覽器在向上滑動內(nèi)容時會自動隱藏頂部導(dǎo)航條與底部工具欄拣宰,從而為主體內(nèi)容預(yù)留出更多展現(xiàn)空間。
夜間模式 & 無圖模式
開啟夜間模式可有效降低屏幕亮度保護(hù)我們的眼睛烦感;
無圖模式可以屏蔽掉網(wǎng)頁中的圖片巡社;
廣告攔截
廣告攔截讓網(wǎng)頁更干凈;頁面加載更加迅速手趣;
多窗口晌该、書簽管理
多窗口、書簽管理回懦、歷史記錄气笙、清除痕跡作為一款瀏覽器必有的功能,所以我的瀏覽器也必須加上了怯晕。
掃描二維碼
每想到Safari沒有掃描二維碼的功能潜圃,就感覺這是一個極大的缺陷,瀏覽器沒有掃描二維碼太不方便了舟茶。
網(wǎng)頁截圖
用我的瀏覽器打開網(wǎng)頁后谭期,雙指長按頁面可以對打開的網(wǎng)頁進(jìn)行選取區(qū)域截圖,并可以進(jìn)行分享保存吧凉。
網(wǎng)頁導(dǎo)出成PDF
有時候我們想在手機(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)有一個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萬條就會影響網(wǎng)頁的加載速度或部分網(wǎng)頁的會被誤攔截禽拔。
完整版的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)的首頁有個打開WebServer的入口刘离,那個『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容器野来,或移動恼除、刪除或新建文件夾等操作。
使用Web Uploader曼氛,我們可以在手機(jī)上添加豁辉、移動、刪除及重名命文件夾搪锣,也可以上傳秋忙、移動、刪除及重命名文件构舟。
內(nèi)置Web DAV
想必用過FTP的朋友應(yīng)該也聽說過Web DAV灰追,與FTP的功能類似。通過Web DAV狗超,可以更方便快捷實(shí)現(xiàn)從電腦上傳或下載文件到web容器弹澎。我的瀏覽器的WebDAV啟動后,默認(rèn)端口是8081努咐。
Windows上WebDAV客戶端可以使用NetDrive苦蒿、AnyClient,Mac上可以使用Transmit渗稍。下面來一張在Mac上使用Transmit 通過 WebDAV 連接到手機(jī)上的『我的瀏覽器』的Web容器目錄的操作演示佩迟。