1. 通過UIWebView與JS互動
通過網頁實現native和伺服器的互動so easy.當然要實現webview的delegate. self.webView.delegate = self;
1.1 iOS用戶端調用JS的方法.
直接使用系統的方法stringByEvaluatingJavaScriptFromString調用JS的方法即可.
[_webView stringByEvaluatingJavaScriptFromString:@"smallfont()"];
*注: smallfont()是JS的方法.
1.2 JS調用iOS的方法.
相比於安卓,iOS 被調用的時候比較麻煩,因為安卓直接有可以被調用的方法,iOS比較矜持了,是不能直接被調用的
1. 首先咱們要喝伺服器端定義好方法和標示. 比如 自家的伺服器定義的 js2ios://{"functionname":"buyNow","args":"88888888"} 意思就是我的參數中帶js2ios,我要和你互動了.你給我實現buyNow的方法(functionname)我要使用參數(args)88888888打電話了.
2. 由於iOS 只能在url重新導向的時候實現被js調用,所以前提是我點網頁上要互動的按鈕之類的,要能跳進我的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 方法,如果不進,你就可以告訴伺服器的小哥說;嗨,帥哥,你的代碼可能有點問題,前提是你自己確保實現了webview的delegate,也就是 self.webView.delegate = self;
3. 現在就是我們在- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 中攔截url了.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([request.URL.scheme isEqualToString:@"js2ios"]) {
// decode
NSString *decodeUrlStr1 = [request.URL.absoluteString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *decodeUrlStr;
SEL selctor = NSSelectorFromString(截取到的方法名);
IMP imp = [self methodForSelector:selctor];
void (*func) (id,SEL) = (void *)imp;
func(self,selctor);
// [self performSelector:selctor withObject:nil];
// 此處直接調用注釋的方法會有警告,可以參考: 我的這篇文章<iOS PerformSelector may cause a leak because its selector is unknown>
// 當然這裡如果不想載入特定的url,或者載入特定的url的時候要進行特殊的處理,可以在這裡攔截
}
return YES;
}
2. 運行時互動
努力學習中...