一、WebView的基本使用
1 概念性知識
01 webView是有缺點的,會導致內(nèi)存泄露,而且這個問題是它系統(tǒng)本身的問題。
02 手機上面的safai其實就是用webView來實現(xiàn)的
03 現(xiàn)在的開發(fā)并不完全是原生的開發(fā),而更加傾向于原生+Html5的方式
04 webView是OC代碼和html代碼之間進行交互的橋梁
2 代碼相關(guān)
/*A*網(wǎng)頁操控相關(guān)方法**/
[self.webView goBack]; 回退
[self.webView goForward]; 前進
[self.webView reload]; 刷新
//設(shè)置是否能夠前進和回退
self.goBackBtn.enabled = webView.canGoBack;
self.fowardBtn.enabled = webView.canGoForward;
/*B*常用的屬性設(shè)置**/
self.webView.scalesPageToFit = YES; 設(shè)置網(wǎng)頁自動適應(yīng)
self.webView.dataDetectorTypes = UIDataDetectorTypeAll;
設(shè)置檢測網(wǎng)頁中的格式類型,all表示檢測所有類型包括超鏈接、電話號碼、地址等。
self.webView.scrollView.contentInset = UIEdgeInsetsMake(50, 0, 0, 0);
/*C*相關(guān)代理方法**/
//每當將加載請求的時候調(diào)用該方法,返回YES 表示加載該請求,返回NO 表示不加載該請求
//可以在該方法中攔截請求
-(BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType
{
return ![request.URL.absoluteString containsString:@"dushu"];
}
//開始加載網(wǎng)頁,不僅監(jiān)聽我們指定的請求,還會監(jiān)聽內(nèi)部發(fā)送的請求
-(void)webViewDidStartLoad:(UIWebView *)webView
//網(wǎng)頁加載完畢之后會調(diào)用該方法
-(void)webViewDidFinishLoad:(UIWebView *)webView
//網(wǎng)頁加載失敗調(diào)用該方法
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
/*D*其它知識點-加載本地資源**/
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的說明
新的需求:點擊按鈕的時候撥打電話
但是我在點擊按鈕的時候,用戶是不知道的,我們怎么能夠知道用戶點擊了網(wǎng)頁上面的一個按鈕,
只能通過一個技巧,那就是自己搞一個特定的協(xié)議頭比如說'abc://',
當我攔截到你的網(wǎng)絡(luò)請求的時候,只需要判斷一下當前的協(xié)議頭是不是這個就能判斷你現(xiàn)在是否是JS調(diào)用。
OC里面有通過字符串生成SEL類型的方法,所以當拿到數(shù)據(jù)之后做下面的事情
1)截取方法的名稱
2)將截取出來的字符串轉(zhuǎn)換為SEL
3)利用performSelect方法來調(diào)用SEL
03 涉及到的相關(guān)方法
[@"abcdef" hasPrefix:@"A"] //判斷字符串是否以一個固定的字符開頭,這里為A
//截串操作
- (NSString *)substringFromIndex:(NSUInteger)from;
//切割字符串,返回一個數(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為唯一的警告標識
[self performSelector:selector withObject:nil];
#pragma clang diagnostic pop
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。