html代码以下javascript
1 <html> 2 <head> 3 <meta charset="utf-8"/> 4 <title>个人网页</title> 5 <script type="text/javascript"> 6 function JS2OC() 7 { 8 window.location.href="fzw://send"; 9 } 10 </script> 11 </head> 12 <body> 13 <input value="js调用oc" type="button" onclick='JS2OC();'></input> 14 </body> 15 </html>
显示效果以下html
oc代码以下java
1 /** 2 * 跳转判断 3 */ 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 5 { 6 NSString *urlString = request.URL.absoluteString; 7 NSLog(@"urlString:%@",urlString); 8 NSString *preString = @"fzw://"; 9 if([urlString hasPrefix:preString]) 10 { 11 NSString *methodString = [urlString substringFromIndex:preString.length]; 12 NSLog(@"methodString:%@",methodString); 13 [self performSelector:NSSelectorFromString(methodString)]; 14 return NO; 15 } 16 return YES; 17 } 18 19 -(void)send 20 { 21 NSLog(@"%s",__func__); 22 }
点击demo.html的按钮“js调用oc”,网页跳转到fzw://send。UIWebView的代理方法- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType拦截页面并获取网页连接fzw://send,通过处理,最后调用oc指定方法-(void)send,并返回NO取消跳转,从而达到js调用oc方法。web
但xcode提示警告: PerformSelector may cause a leak because its selector is unknownxcode
编译器的警告对开发者来讲是颇有用的信息,但有时因为编译器的智商实在过低,会提示一些无谓的警告。当有些警告不想看到时,能够用以下代码消除警告。url
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-W警告名称"
须要关闭警告的代码
#pragma clang diagnostic popspa
该警告的名称为-Warc-performSelector-leaks3d
1 /** 2 * 跳转判断 3 */ 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 5 { 6 NSString *urlString = request.URL.absoluteString; 7 NSLog(@"urlString:%@",urlString); 8 NSString *preString = @"fzw://"; 9 if([urlString hasPrefix:preString]) 10 { 11 NSString *methodString = [urlString substringFromIndex:preString.length]; 12 NSLog(@"methodString:%@",methodString); 13 #pragma clang diagnostic push 14 #pragma clang diagnostic ignored "-Warc-performSelector-leaks" 15 [self performSelector:NSSelectorFromString(methodString)]; 16 #pragma clang diagnostic pop 17 return NO; 18 } 19 return YES; 20 } 21 22 -(void)send 23 { 24 NSLog(@"%s",__func__); 25 }