最近公司項(xiàng)目組長(zhǎng)添加了一種JS與OC交互的方法晾嘶,一直想研究妓雾,于是乎就各種百度,下面把我覺(jué)得讓我思路打開(kāi)的幾篇文章分享給大家垒迂,后續(xù)有時(shí)間會(huì)補(bǔ)上相關(guān)使用Demo械姻。
iOS js oc相互調(diào)用(JavaScriptCore)
iOS js oc相互調(diào)用(JavaScriptCore)(二)
關(guān)于JS和OC交互
iOS與JS交互實(shí)戰(zhàn)篇(ObjC版)
JS&iOS原生交互
webView與js交互、
再給大家看一下項(xiàng)目中實(shí)際的代碼吧
#import <Foundation/Foundation.h>
#import <JavaScriptCore/JavaScriptCore.h>
#import "ParentWebView.h"
/** 用于傳值的Block机断,具體傳值克根據(jù)需要自定義 **/
typedef void(^ CLMarketModelBlock)(NSString *type,NSString *mainType,NSString *urlStr);
@protocol JavaScriptObjectiveCDelegate <JSExport>
/** 以下的方法名稱是需要跟JS涉及的方法名相對(duì)應(yīng)的一致的命名 **/
- (void) goodsCar;
- (void) reserveFlower;
- (void) huacaoReserve;
- (void)list:(NSString *)categorId Detail:(NSString *)Property ;
- (void) go: (NSString *)url Looper: (NSString *)title;
- (void) reserveListDetail:(NSString *)Date;
@end
@interface CLMarketModel : NSObject<JavaScriptObjectiveCDelegate>
@property (nonatomic, weak) JSContext *jsContext1;
@property (nonatomic, weak) ParentWebView *webView1;
@property (nonatomic ,strong) NSString *type;
@property (nonatomic ,copy) CLMarketModelBlock CLMarketBlock;
@end
#import "CLMarketModel.h"
#import "MaketViewController.h"
@implementation CLMarketModel
- (void)goodsCar {
self.CLMarketBlock(_type,nil,nil);
}
- (void)reserveFlower {
NSString *str = [NSString stringWithFormat:@"%@%@",E_InsideUrl,@"/easyflower/h5_3/yh_huacaiyuding.html?app=ios"];
self.CLMarketBlock(str,EF_YUDING,nil);
}
- (void) huacaoReserve {
self.CLMarketBlock(nil,EF_HUACAOYUDING,nil);
}
- (void) list:(NSString *)categorId Detail:(NSString *)Property {
self.CLMarketBlock (nil,EF_SHANGPIN,nil);
}
- (void) go: (NSString *)url Looper: (NSString *)title {
self.CLMarketBlock(nil,EF_QITAURL,url);
}
- (void)reserveListDetail:(NSString *)Date {
self.CLMarketBlock (nil,nil,Date);
}
@end
#import "CLMarketModel.h"
#import <JavaScriptCore/JavaScriptCore.h>
{
JSContext *_mainJsContxt;
}
/****************************************************************************************************************************************************************************************************************************/
_mainJsContxt = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
CLMarketModel *model = [[CLMarketModel alloc] init];
_mainJsContxt[@"JSInterface"] = model;
model.jsContext1 = _mainJsContxt;
model.webView1 = _Myweb;
__weak __typeof(self)weakSelf = self;
model.CLMarketBlock = ^(NSString *type ,NSString *mainTYpe,NSString *Urlstr)
{
/** 根據(jù)傳值不同做不同的操作即可 **/
};
_mainJsContxt.exceptionHandler = ^(JSContext *context, JSValue *exceptionValue) {
context.exception = exceptionValue;
/** 程序異常時(shí)的相關(guān)操作放到這里即可 **/
};