1.JS调用OC
1.新建OC类
2.编辑头文件
//导入头文件
#import <JavaScriptCore/JavaScriptCore.h>
//定义协议
@protocol JSObjectProtocol <JSExport>
//带参数
JSExportAs(toast, -(void)toast:(NSString *)value);
/**不带参数*/
-(void)ljtz;
@end
//头文件声明
@interface JSObject : NSObject<JSObjectProtocol>
//定义初始化方法,就可以得到该视图的控制器
- (instancetype)initWithRootViewController:(UIViewController *)vc;
/**定义该控制器的代理*/
@property (nonatomic, assign) id<JSObjectDelegate>delegate;
@end
3.编辑.m文件
//定义扩展
@interface JSObject()
//声明控制器属性
@property (nonatomic, strong) UIViewController *rootVC;
@end
@implementation JSObject
//初始化方法
- (instancetype)initWithRootViewController:(UIViewController *)vc
{
self = [super init];
if (self) {
_rootVC = vc;
}
return self;
}
//带参数方法
- (void)toast:(NSString *)value
{
NSLog(@"value:%@",value);
}
//不带参数方法
-(void)ljtz{
NSLog(@"ljtz");
}
@end
以上就完成了JS对象的设置。
4.新建视图控制器,编辑.m文件
//导入类
#import "JSObject.h"
@interface ViewController ()
//设置属性
@property (nonatomic, strong) JSObject *jsObj;
@end
@implementation SFProductsViewController
/**
其余代码
*/
//懒加载JSObject属性
- (JSObject *)jsObj
{
if (!_jsObj) {
_jsObj = [[JSObject alloc] initWithRootViewController:self];
}
return _jsObj;
}
- (void)viewDidLoad{
//新建JS连接
JSContext *context=[webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//注册phone对象(在网页上写phone.ljtz就可以调用类中的方法了)
context[@"phone"] = self.jsObj;
}
/**
其余代码
*/
@end
2.OC调用JS
@interface ViewController ()<UIWebViewDelegate>
/**webView*/
@property (nonatomic, strong) UIWebView *webView;
@end
//懒加载webView
-(UIWebView*)webView{
if(!_webView){
_webView=[[UIWebView alloc]initWithFrame:self.view.bounds];
_webView.delegate=self;
_webView.backgroundColor=[UIColor whiteColor];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:self.urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0f];
[_webView loadRequest:request];
}
return _webView;
}
#pragma mark - 生命周期
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:self.webView];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
//设置该文件名称,这里可以更改为其余JS代码
NSString *jsstring=@"document.title";
NSString *title=[webView stringByEvaluatingJavaScriptFromString:jsstring];
NSLog(@"网页名称:%@",title);
}