首先说明一下 :


后台经常会给到我们这样的 JS 方法 :

app.exit 
 ();
 
app.logout 
 ();
 
save 
 ( 
 cardno 
 ); 
    
 等类似的方法



这类方法我们可以通过实现了 JSExport 协议来调用它;


首先创建 <NSObject>  类


.H 文件中写 :



#import <Foundation/Foundation.h>
 
#import <JavaScriptCore/JavaScriptCore.h>
 
 
 
 
// 
 首先创建一个实现了 
 JSExport 
 协议的协议
 
@protocol JSMutualDataProtocol <JSExport>
 
 
 
 
// 
 退出登录
 
- 
 ( 
 void 
 ) 
 logout 
 ;
 
 
 
 
@end
 
 
 
 
 
 
 
// 
 退出登录协议
 
@protocol LogOutDelegate <NSObject>
 
 
 
 
- 
 ( 
 void 
 ) 
 logout 
 ;
 
 
 
 
@end
 
 
 
 
 
 
 
 
 
 
@interface JSMutualData : NSObject<JSMutualDataProtocol>
 
 
 
 
@property 
 ( 
 nonatomic 
 , 
 weak 
 ) 
 id<LogOutDelegate>logOutDelegate 
 ; 
   // 
 退出登录协议
 
@end





.M 文件写 :



// 
 退出登录
 
- 
 ( 
 void 
 ) 
 logout
 
{
 
     
 [ 
 _logOutDelegate logout 
 ];
 
}




最后去 webView 控制器页面实现当前协议



签协议 <LogOutDelegate>


然后在


WebViewDidFinishLoad  方法中实现如下方法 :



// 
 首先创建 
 JSContext  
 对象(此处通过当前 
 webView 
 的键获取到 
 jscontext 
 )
 
    JSContext *context= 
 [ 
 webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext" 
 ];
 
    
 
    //JS 
 方法,通过对象方法获取点击方法
 
    JSMutualData *MutualData =  
 [[ 
 JSMutualData alloc 
 ] 
 init 
 ];
 
    context 
 [ 
 @"app" 
 ] 
  = MutualData 
 ;
 
     
 [ 
 MutualData setLogOutDelegate: 
 ( 
 id<LogOutDelegate> 
 ) 
 self 
 ];



最后实现类方法:


-(void)logout 

 

  { 

 

  NSLog(@"````````````logout"); 

 
}
 
 
 
 
 
 
 
 
 
 
save 
 ( 
 cardno 
 );



方法如下:


- (void)WebViewDidFinishLoad:(UIWebView *)webView 

 

  { 

 

  [webView stringByEvaluatingJavaScriptFromString:@"save('12345');"]; 

 

  }

save ( cardno ); 方法赋值了,很好用




还有另外后台给的方法: app.onLogin(mm,bb);


通过JS方法获得mm , bb的值



还是上面那个方法一样的, 可以通过JSExport协议 得到值



// 
 退出登录
 
- 
 ( 
 void 
 ) 
 logout 
 ;
 

  换成下面这个方法: 

 

  //获取登录账号和密码 

 

  -(void)on:(NSString *)account Login:(NSString *)password;



.m文件写:


-(void)on:(NSString *)account Login:(NSString *)password 

 

  { 

 

  [_LoginDelegate on:account Login:password]; 

 

  }



然后去webView控制器上面签协议,写方法就可以了