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 }