云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)
閱讀目錄
1.WebView高可擴(kuò)展性封裝
1.1 發(fā)現(xiàn)模塊的框架搭建
1.2 webView的基類(lèi)
1.3 對(duì)webview基類(lèi)的實(shí)現(xiàn)
1.4 setInitializer的方法的實(shí)現(xiàn)
1.5 webView內(nèi)部的處理和控制
1.6 對(duì)初始化方法的調(diào)用
1.7 測(cè)試
?1.8 增加頁(yè)面間的跳轉(zhuǎn)
2.Web與原生交互一鍵式配置解決方案
2.1 展現(xiàn)原有的web頁(yè)面的樣式
?2.2 事件的綁定
2.3事件綁定的測(cè)試
2.4 使用原生處理web
3. 將混合微框架集成到latte并完善
3.1 js接口的增加
3.2 對(duì)事件的添加
3.3 web頁(yè)面的loader延時(shí)的處理
?3.4 webDelegate的Setlistener的加載方式
1.WebView高可擴(kuò)展性封裝
【說(shuō)明】發(fā)現(xiàn)模塊的開(kāi)發(fā):是加載WebView的操作,打開(kāi)之后不應(yīng)該是web內(nèi)部的跳轉(zhuǎn),應(yīng)該是Activity或者是fragment的跳轉(zhuǎn);
這種跳轉(zhuǎn)讓webView的跳轉(zhuǎn)更接近與原生的跳轉(zhuǎn);
回到頂部
1.1 發(fā)現(xiàn)模塊的框架搭建
回到頂部
1.2 webView的基類(lèi)
【基類(lèi)】
【初始化webView的接口】
?
【完善基類(lèi)】
【路由類(lèi)的創(chuàng)建】
【完善基類(lèi)】
【創(chuàng)建webview的接口】
【完善基類(lèi)】
回到頂部
1.3 對(duì)webview基類(lèi)的實(shí)現(xiàn)
?
【新建類(lèi):webViewClientImpl類(lèi): 進(jìn)行攔截】
[復(fù)寫(xiě)方法]可以根據(jù)不同的版本進(jìn)行方法的分類(lèi)的選擇,為了兼容性,選擇復(fù)寫(xiě)下面的一個(gè)方法;
?
?
1.3.2 對(duì)內(nèi)容的攔截
【內(nèi)容攔截的原理】【在web頁(yè)面中存在localholf或者是a標(biāo)簽,全部都會(huì)以下面的方式攔截下來(lái),然后在原生中強(qiáng)制進(jìn)行跳轉(zhuǎn),主要實(shí)在route中對(duì)時(shí)間進(jìn)行處理】
【路由類(lèi)-1】【新建路由類(lèi)】使用路由的截?cái)嗪吞幚?/p>
?
【完善實(shí)現(xiàn)類(lèi)】寫(xiě)了下面的代碼表示:頁(yè)面間的所有的跳轉(zhuǎn)和JavaScrip中的hof重定向,全部都使用原生的進(jìn)行接管;
【路由類(lèi)-2】如果js中包含了電話(huà)的鏈接,則需要對(duì)電話(huà)的協(xié)議tel的協(xié)議進(jìn)行處理;
[對(duì)撥打電話(huà)的處理]
[非電話(huà)]進(jìn)行原生的跳轉(zhuǎn),需要判斷上層是否具有delegate即容器,如果上層具有容器,則在上層進(jìn)行跳轉(zhuǎn),如果上層沒(méi)有,則是單層跳轉(zhuǎn);防止bottemBar之內(nèi)層跳轉(zhuǎn),外層不跳轉(zhuǎn)的情況;
?
?1.3.3 對(duì)頁(yè)面的內(nèi)容的加載
【說(shuō)明】需要對(duì)頁(yè)面進(jìn)行l(wèi)oad的過(guò)程
【首先實(shí)現(xiàn)對(duì)web頁(yè)面的加載】
【對(duì)local本地頁(yè)面的加載】
[對(duì)于local本地的解釋]在此處新建的文件asset中的html文件、js文件、樣式等文件都會(huì)以本地的形式進(jìn)行顯示;
[對(duì)本地頁(yè)面的額外的處理]
?
【共有方法的處理】包含了local和webView的整體的處理;
【調(diào)用】其實(shí)在打開(kāi)頁(yè)面的時(shí)候就已經(jīng)進(jìn)行了一些加載了;
回到頂部
1.4 setInitializer的方法的實(shí)現(xiàn)
?
?【新建類(lèi)】com.flj.latte.delegates.web.WebViewInitializer
【設(shè)置初始化的webView】
回到頂部
1.5 webView內(nèi)部的處理和控制
【說(shuō)明】不做任何的處理,只是程序的需要;
回到頂部
1.6 對(duì)初始化方法的調(diào)用
回到頂部
1.7 測(cè)試
【說(shuō)明】先加載本地的頁(yè)面;
?
?【修改拼接錯(cuò)誤】
【使用chrom 調(diào)試】
【使用nginx的遠(yuǎn)程測(cè)試】
?
回到頂部
?1.8 增加頁(yè)面間的跳轉(zhuǎn)
【增加跳轉(zhuǎn)的橫向的動(dòng)畫(huà)】
【新建頁(yè)面2】
【為index頁(yè)面增加內(nèi)容】
回到頂部
2.Web與原生交互一鍵式配置解決方案
回到頂部
2.1 展現(xiàn)原有的web頁(yè)面的樣式
【出現(xiàn)的設(shè)計(jì)的不合理】在discoverDelegate下層還有一層bottemBarDelegate,discoverDelegate是一個(gè)低層次的delegete;
【再次設(shè)置】
?
?
?
?
【效果】跳轉(zhuǎn)的頁(yè)面2沒(méi)有出現(xiàn)上下的控制鍵,是一種web原生的狀態(tài)展現(xiàn)出來(lái)的;這樣可以更好的適應(yīng)discover頁(yè)面的內(nèi)容的不斷的更新,都有web頁(yè)面完成;
回到頂部
?2.2 事件的綁定
?【json事件的action事件的原理】就是通過(guò)web事件中一些action事件來(lái)綁定我們的事件;
【增加注解】
【新建包和類(lèi)】
【event類(lèi)】抽象每一個(gè)具體的事件;將每一個(gè)事件作為每一個(gè)類(lèi)的一個(gè)實(shí)例來(lái)處理;
?
【事件管理的完善】eventManager.class 的完善;
?
【將事件統(tǒng)一的加到事件組中】
回到頂部
2.3事件綁定的測(cè)試
【測(cè)試】
【書(shū)寫(xiě)web頁(yè)面】推薦的工具ws;
【點(diǎn)擊之后沒(méi)有反應(yīng)】需要開(kāi)辟js的通道;
?
?
?【測(cè)試】-切換別的action;
【web和原生進(jìn)行有機(jī)的交互】在通過(guò)判斷不同的action可以進(jìn)行不同的動(dòng)作的執(zhí)行;
?
回到頂部
2.4 使用原生處理web
?
回到頂部
3. 將混合微框架集成到latte并完善
回到頂部
3.1 js接口的增加
?【說(shuō)明】通過(guò)配置項(xiàng)對(duì)web的名稱(chēng)進(jìn)行修改;
?
回到頂部
3.2 對(duì)事件的添加
?
回到頂部
3.3 web頁(yè)面的loader延時(shí)的處理
【增加延時(shí)】為了能夠更好的看清效果,增加延時(shí),使用handler處理;
回到頂部
?3.4 webDelegate的Setlistener的加載方式
【webDelegate的Setlistener的加載方式】有很多種,在impl中可以完成一次加載;
?
【加載測(cè)試】sui建立的一些css和js的頁(yè)面;
?
總結(jié)
以上是生活随笔為你收集整理的云炬Android开发笔记 12基于WebView的混合App框架设计(包含浏览器与原生请求Cookie的处理)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C语言和C+的区别是什么?8个点通俗易懂
- 下一篇: 云炬Android开发笔记 13购物车