在iOS開(kāi)發(fā)的過(guò)程中我們可能會(huì)遇到混合開(kāi)發(fā)的情況,但并不是使用UIWebView簡(jiǎn)單的調(diào)用網(wǎng)頁(yè),往往需要我們和網(wǎng)頁(yè)進(jìn)行交互,本文將和大家共同探討iOS混合開(kāi)發(fā)的那些事。
一、手機(jī)軟件開(kāi)發(fā)模式介紹
目前手機(jī)app的開(kāi)發(fā)模式無(wú)外乎三種:
1.Native App,原生APP,使用原生SDK和IDE開(kāi)發(fā)的基于iOS和Android的APP;Native App性能好,用戶體驗(yàn)好,但是也有弊端,開(kāi)發(fā)周期長(zhǎng)、不能跨平臺(tái)、版本更新復(fù)雜。
2.Web App,即網(wǎng)頁(yè)APP,手機(jī)相當(dāng)于一個(gè)瀏覽器,這種模式開(kāi)發(fā)簡(jiǎn)單,但是訪問(wèn)速度慢、用戶體驗(yàn)差。
3.Hybrid App,混合APP,綜合了Web App的開(kāi)發(fā)速度和Native App的高性能體驗(yàn)。
二、Hybrid App中iOS和html的交互 ?demo下載
1.本節(jié)中用到的html文件內(nèi)容為:html文件下載
2.使用UIWebView加載html文件,可以加載本地的html文件或者網(wǎng)頁(yè)文件,本節(jié)中選擇加載本地文件。
3.如果此時(shí)你想把“標(biāo)題”刪除,但是不通過(guò)修改html文件的方法,使用iOS的修改就可以在UIWebView的代理方法-(void)webViewDidFinishLoad:(UIWebView*)webView中用webView調(diào)用js代碼去刪除html中的元素,具體代碼如下:
此時(shí)你又發(fā)現(xiàn)“陌子夕”實(shí)際應(yīng)該為“夕子陌”,我們也可以使用iOS調(diào)用修改標(biāo)簽的內(nèi)容,代碼如下:
此時(shí)需求又讓你在虹口下面添加一張圖片,代碼如下:
修改“虹口”字體的大小:
修改字體顏色和網(wǎng)頁(yè)的背景顏色:
以上是在iOS端修改html網(wǎng)頁(yè)的界面元素,主要使用了UIWebView的代理方法:-(void)webViewDidFinishLoad:(UIWebView*)webView,然后編寫js代碼,用webView通過(guò)方法:- (nullableNSString*)stringByEvaluatingJavaScriptFromString:(NSString*)script去調(diào)用js代碼。
4、捕獲html上按鈕的點(diǎn)擊事件,然后就可以在本地適當(dāng)?shù)臅r(shí)候處理一些事件。主要也是使用了UIWebView的代理方法:
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType,
當(dāng)點(diǎn)擊html文件上的按鈕時(shí)就會(huì)觸發(fā)這個(gè)代理方法,(本文中使用UIWebView調(diào)用百度的主頁(yè),然后點(diǎn)擊搜索的時(shí)候讓網(wǎng)頁(yè)彈出提示:加載新聞失敗了);
代碼為:
-(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
NSURL*URL = request.URL;
NSString*urlStr = URL.absoluteString;
if([urlStr isEqualToString:@"http://m.news.baidu.com/news?fr=mohome&ssid=0&from=844b&uid=&pu=sz%401320_2001%2Cta%40iphone_1_9.3_3_601&bd_page_type=1"]) {
[webView stringByEvaluatingJavaScriptFromString:@"alert('加載新聞失敗了')"];
returnNO;
}
returnYES;
}
三、總結(jié)
在iOS中操作html的幾個(gè)步驟:
1.利用UIWebView加載本地html資源或者網(wǎng)絡(luò)上html資源;
2.設(shè)置UIWebView的代理為當(dāng)前視圖控制器,并遵守協(xié)議;
3.用類選擇器或者id選擇器或者標(biāo)簽選擇器等選擇要進(jìn)行操作的標(biāo)簽;
4.把獲取到的標(biāo)簽轉(zhuǎn)換成js代碼的字符串;
5.UIWebView對(duì)象調(diào)用stringByEvaluatingJavaScriptFromString方法執(zhí)行js代碼。
iOS監(jiān)聽(tīng)html文件的步驟是:
1.利用UIWebView加載本地html資源或者網(wǎng)絡(luò)上html資源;
2.設(shè)置UIWebView的代理為當(dāng)前視圖控制器,并遵守協(xié)議;
3.獲取到將要加載的html資源的鏈接;
4.在代理方法中URL.absoluteString是否和上述獲取的鏈接相同;
5.根據(jù)判斷結(jié)果處理需求。