OC与JS互相调用

1.JS调用OC

1.新建OC类

JSObject类

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值