最近,发现h5越来越火了,最近做一个项目,就是用h5来写页面和逻辑,但是还是有一些问题h5是没有办法解决的,那就是第三方登录,和分享还有支付的功能,所以这里就涉及到h5与iOS交互的问题,也就是h5与iOS相互调用。 说明: (1)Objective-C调用JavaScript代码的时候是同步的
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script; (2)JavaScript调用Objective-C代码的时候是异步的
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType; 那么我们的需求是h5调用OC的代码然后来完成分享,登录,和支付.所以在运用的时候用了"URL拦截"的方法,那么如何进行URL拦截呢,那么有两种方法,第一种就是使用拦截器,但是所得到的url是不固定的,所以这种方法不适合使用,那么第二种方法就是使用webview的代理方法,shouldStartLoadWithRequest,当然,用这个拦截那么就会得到一个固定的url.
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSString *urlstr = request.URL.absoluteString;
NSString *tmp = [urlstr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSRange range = [tmp rangeOfString:@"app://"];
if (range.length != 0) {
NSString *JSRequest = [tmp substringFromIndex:(range.location+range.length)];
[self doForJSRequest:JSRequest];
return NO;
}
return YES;
}
到这里就可以拦截到url ,然后就可以进行你一些方法的调用啦.