javascript
iOS原生WebView中JavaScript和OC交互
在iOS開發中很多時候我們會和UIWebView打交道,目前國內的很多應用都采用了UIWebView的混合編程技術,最常見的是微信公眾號的內容頁面。前段時間在做微信公眾平臺相關的開發,發現很多應用場景都是利用HTML5和UIWebView來實現的。
注意事項
(1)線程阻塞問題。
OC調用- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script時,可能由于JS是單線程的原因,會阻塞
原JS代碼的執行。解決方案:JS端用defer將IFrame的插入延后執行。
一、機制
Objective-C語言調用JavaScript語言,是通過UIWebView的?- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;的方法來實現的。該方法向UIWebView傳遞一段需要執行的JavaScript代碼最后獲取執行結果。
JavaScript語言調用Objective-C語言,并沒有現成的API,但是有些方法可以達到相應的效果。具體是利用UIWebView的特性:在UIWebView的內發起的所有網絡請求,都可以通過delegate函數得到通知。
二、示例
下面提供一個簡單的例子介紹如何相互的調用,實現的效果是在界面上點擊一個鏈接,然后彈出一個對話框判斷是否登錄成功。
三、代碼--重點
(1)Html
<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta content="always" name="referrer" /><title>測試網頁</title></head><body><br /><a href="devzeng://login?name=zengjing&password=123456">點擊鏈接</a></body> </html>(2)UIWebView Delegate回調方法為:- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {NSURL *url = [request URL];if([[url scheme] isEqualToString:@"devzeng"]) {//處理JavaScript和Objective-C交互if([[url host] isEqualToString:@"login"]){//獲取URL上面的參數NSDictionary *params = [self getParams:[url query]];BOOL status = [self login:[params objectForKey:@"name"] password:[params objectForKey:@"password"]];if(status){//調用JS回調[webView stringByEvaluatingJavaScriptFromString:@"alert('登錄成功!')"];}else{[webView stringByEvaluatingJavaScriptFromString:@"alert('登錄失敗!')"];}}return NO;}return YES; }
(3)說明
1、同步和異步的問題
(1)Objective-C調用JavaScript代碼的時候是同步的
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
(2)JavaScript調用Objective-C代碼的時候是異步的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
2、常見的JS調用
(1)獲取頁面title
NSString *title = [webview stringByEvaluatingJavaScriptFromString:@"document.title"];
(2)獲取當前的URL
NSString *url = [webview stringByEvaluatingJavaScriptFromString:@"document.location.href"];
轉載于:https://www.cnblogs.com/songchunmin/p/7789885.html
總結
以上是生活随笔為你收集整理的iOS原生WebView中JavaScript和OC交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统调用syscall---用户态切换到
- 下一篇: JAVAWEB 一一 SpringMVC