總結: OC調用JS方法和給JS賦值
首先說明一下:
後臺經常會給到我們這樣的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);
這樣的方法,可以通過stringByEvaluatingJavaScriptFromString 方法給cardno賦值
方法如下:
- (void)WebViewDidFinishLoad:(UIWebView *)webView
{
[webView stringByEvaluatingJavaScriptFromString:@"save('12345');"];
}
這樣就可以給JS中的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控制器上面籤協議,寫方法就可以了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.