ios中objective-c与js的交互

来源:互联网 发布:smi s java 编辑:程序博客网 时间:2024/05/23 15:36

转载地址 http://blog.csdn.net/mkhgg/article/details/7109097

iOS中js与objective-c的交互 

因为在iOS中没有WebKit.Framework这个库的,所以也就没有 windowScriptObject对象方法了。要是有这个的方法的话 
就方便多了,(ps:MacOS中有貌似) 

现在我们利用其他方法去达到js与objective-c的交互效果。 

首先是objective-c调用js中的代码,可以用uiwebview中的一个方法 
stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法 

的返回值。 

而在js调用objective-c的方法就没那么简单了, 

在js中的代码应该这么做: 

[cpp] view plaincopy
  1. function testFunc(cmd,parameter1)   
  2. {   
  3.     alert(1);   
  4.     document.write(Date());   
  5.     document.location="objc://"+cmd+":/"+parameter1;  //cmd代表objective-   
  6. c中的的方法名,parameter1自然就是参数了   
  7. }   



 

而在objective-c中,也是利用uiwebview的一个方法, 
[cpp] view plaincopy
  1. - (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:   
  2. (NSURLRequest*)request navigationType:   
  3. (UIWebViewNavigationType)navigationType //这个方法是网页中的每一个请求都会被触发的   
  4. {   
  5.     NSString *urlString = [[request URL] absoluteString];   
  6.     NSArray *urlComps = [urlString   
  7. componentsSeparatedByString:@"://"];   
  8.   
  9.     if([urlComps count] && [[urlComps objectAtIndex:0]   
  10. isEqualToString:@"objc"])   
  11.     {   
  12.         NSArray *arrFucnameAndParameter = [(NSString*)[urlComps   
  13. objectAtIndex:1] componentsSeparatedByString:@":/"];   
  14.         NSString *funcStr = [arrFucnameAndParameter objectAtIndex:0];   
  15.         if (1 == [arrFucnameAndParameter count])   
  16.         {   
  17.             // 没有参数   
  18.             if([funcStr isEqualToString:@"doFunc1"])   
  19.             {   
  20.                 /*调用本地函数1*/   
  21.                 NSLog(@"doFunc1");   
  22.             }   
  23.         }   
  24.         else if(2 == [arrFucnameAndParameter count])   
  25.         {   
  26.             //有参数的   
  27.             if([funcStr isEqualToString:@"doFunc1"] &&   
  28. [arrFucnameAndParameter objectAtIndex:1])   
  29.             {   
  30.                /*调用本地函数1*/   
  31.                 NSLog(@"doFunc1:parameter");   
  32.             }   
  33.         }   
  34.         return NO;   
  35.     };   
  36.     return YES;   
  37. }   


这个方法是可以达到js调用本地objective-c的方法,可惜没办法把返回值返回给js,所以还是要绕过 
stringByEvaluatingJavaScriptFromString:这个弯,用 

[cpp] view plaincopy
  1. stringByEvaluatingJavaScriptFromString:  


函数去掉js的方法,把返回值当做js方法中的参数形式传回去给 
js。这个可以有,呵呵~ 


0 0