通过网页实现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;
}
努力学习中...