說(shuō)明:本文轉(zhuǎn)載自http://git.devzeng.com/blog/ios-uiwebview-interaction-with-javascript.html
-(void)viewDidLoad:
在iOS開發(fā)中很多時(shí)候我們會(huì)和UIWebView打交道淹遵,目前國(guó)內(nèi)的很多應(yīng)用都采用了UIWebView的混合編程技術(shù)爷光,最常見(jiàn)的是微信公眾號(hào)的內(nèi)容頁(yè)面腌紧。前段時(shí)間在做微信公眾平臺(tái)相關(guān)的開發(fā)唉韭,發(fā)現(xiàn)很多應(yīng)用場(chǎng)景都是利用HTML5和UIWebView來(lái)實(shí)現(xiàn)的。
機(jī)制
Objective-C語(yǔ)言調(diào)用JavaScript語(yǔ)言女器,是通過(guò)UIWebView的
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script
;的方法來(lái)實(shí)現(xiàn)的。該方法向UIWebView傳遞一段需要執(zhí)行的JavaScript代碼最后獲取執(zhí)行結(jié)果入桂。
JavaScript語(yǔ)言調(diào)用Objective-C語(yǔ)言抗愁,并沒(méi)有現(xiàn)成的API,但是有些方法可以達(dá)到相應(yīng)的效果呵晚。具體是利用UIWebView的特性:在UIWebView的內(nèi)發(fā)起的所有網(wǎng)絡(luò)請(qǐng)求蜘腌,都可以通過(guò)delegate函數(shù)得到通知。
說(shuō)明:
1饵隙、同步和異步的問(wèn)題
(1)Objective-C調(diào)用JavaScript代碼的時(shí)候是同步的
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
(2)JavaScript調(diào)用Objective-C代碼的時(shí)候是異步的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
2撮珠、常見(jiàn)的JS調(diào)用
(1)獲取頁(yè)面title
NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"];
(2)獲取當(dāng)前的URL
NSString *url = [webview stringByEvaluatingJavaScriptFromString:@"document.location.href"];
3、使用第三方庫(kù)