一、WebView的基本使用
1 概念性知識(shí)
01 webView是有缺點(diǎn)的余佛,會(huì)導(dǎo)致內(nèi)存泄露,而且這個(gè)問(wèn)題是它系統(tǒng)本身的問(wèn)題蠢熄。
02 手機(jī)上面的safai其實(shí)就是用webView來(lái)實(shí)現(xiàn)的
03 現(xiàn)在的開(kāi)發(fā)并不完全是原生的開(kāi)發(fā)扇雕,而更加傾向于原生+Html5的方式
04 webView是OC代碼和html代碼之間進(jìn)行交互的橋梁
2 代碼相關(guān)
/*A*網(wǎng)頁(yè)操控相關(guān)方法**/
[self.webView goBack]; 回退
[self.webView goForward]; 前進(jìn)
[self.webView reload]; 刷新
//設(shè)置是否能夠前進(jìn)和回退
self.goBackBtn.enabled = webView.canGoBack;
self.fowardBtn.enabled = webView.canGoForward;
/*B*常用的屬性設(shè)置**/
self.webView.scalesPageToFit = YES; 設(shè)置網(wǎng)頁(yè)自動(dòng)適應(yīng)
self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
設(shè)置檢測(cè)網(wǎng)頁(yè)中的格式類型金拒,all表示檢測(cè)所有類型包括超鏈接、電話號(hào)碼折剃、地址等另假。
self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
/*C*相關(guān)代理方法**/
//每當(dāng)將加載請(qǐng)求的時(shí)候調(diào)用該方法,返回YES 表示加載該請(qǐng)求怕犁,返回NO 表示不加載該請(qǐng)求
//可以在該方法中攔截請(qǐng)求
-(BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
return ![request.URL.absoluteString containsString:@"dushu"];
}
//開(kāi)始加載網(wǎng)頁(yè)边篮,不僅監(jiān)聽(tīng)我們指定的請(qǐng)求,還會(huì)監(jiān)聽(tīng)內(nèi)部發(fā)送的請(qǐng)求
-(void)webViewDidStartLoad:(UIWebView *)webView
//網(wǎng)頁(yè)加載完畢之后會(huì)調(diào)用該方法
-(void)webViewDidFinishLoad:(UIWebView *)webView
//網(wǎng)頁(yè)加載失敗調(diào)用該方法
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
/*D*其它知識(shí)點(diǎn)-加載本地資源**/
NSURL *url = [[NSBundle mainBundle] URLForResource:@"text.html" withExtension:nil];
[self.webView loadRequest:[NSURLRequest requestWithURL:url]];
二奏甫、OC和JS代碼的互調(diào)
01 OC調(diào)用JS的代碼
NSString *str = [self.webView stringByEvaluatingJavaScriptFromString:@"sum()"];
02 JS怎么調(diào)用OC的說(shuō)明
新的需求:點(diǎn)擊按鈕的時(shí)候撥打電話
但是我在點(diǎn)擊按鈕的時(shí)候戈轿,用戶是不知道的,我們?cè)趺茨軌蛑烙脩酎c(diǎn)擊了網(wǎng)頁(yè)上面的一個(gè)按鈕阵子,
只能通過(guò)一個(gè)技巧思杯,那就是自己搞一個(gè)特定的協(xié)議頭比如說(shuō)'abc://',
當(dāng)我攔截到你的網(wǎng)絡(luò)請(qǐng)求的時(shí)候,只需要判斷一下當(dāng)前的協(xié)議頭是不是這個(gè)就能判斷你現(xiàn)在是否是JS調(diào)用挠进。
OC里面有通過(guò)字符串生成SEL類型的方法色乾,所以當(dāng)拿到數(shù)據(jù)之后做下面的事情
1)截取方法的名稱
2)將截取出來(lái)的字符串轉(zhuǎn)換為SEL
3)利用performSelect方法來(lái)調(diào)用SEL
03 涉及到的相關(guān)方法
[@"abcdef" hasPrefix:@"A"] //判斷字符串是否以一個(gè)固定的字符開(kāi)頭,這里為A
//截串操作
- (NSString *)substringFromIndex:(NSUInteger)from;
//切割字符串领突,返回一個(gè)數(shù)組
- (NSArray<NSString *> *)componentsSeparatedByString:(NSString *)separator;
//替換操作
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
//把string包裝成SEL
SEL selector = NSSelectorFromString(sel);
04 如何屏蔽警告
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
//-Warc-performSelector-leaks為唯一的警告標(biāo)識(shí)
[self performSelector:selector withObject:nil];
#pragma clang diagnostic pop
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者