總結: 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控制器上面籤協議,寫方法就可以了


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章