iOS - oc与js交互的几种方式(1)

  • oc调用js代码两种方式

    • 1.通过webVIew调用 webView stringByEvaluatingJavaScriptFromString: 调用
    • 2.通过JSContext调用[context evaluateScript:];
  • 演示代码

#import "ViewController.h"
#import <JavaScriptCore/JavaScriptCore.h>

#define kScreenW [UIScreen mainScreen].bounds.size.width
#define kScreenH [UIScreen mainScreen].bounds.size.height
#define kScreenB [UIScreen mainScreen].bounds
@interface ViewController ()<UIWebViewDelegate>

/** webView */
@property (nonatomic, strong) UIWebView *webView;

@end

@implementation ViewController

#pragma mark - webView delegate

/**
 1.js调用oc,每次js相应事件调用的方法
 2.通过js相应的时间中得到url字符串.通过判断字符串是点击了百度新闻这个链接.
 3.可以返回YES 或者 NO 来确定是加载网页还是响应我们自定义的事件.
 */
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{

//截取点击网页上的超链接字符串
    NSString * urlStr = request.URL.absoluteString;

    NSLog(@"%@",urlStr);

//判断字符串是否为我们需要的
    if ([urlStr isEqualToString:@"http://m.news.baidu.com/news?fr=mohome&ssid=0&from=844b&uid=&pu=sz%401320_2001%2Cta%40iphone_1_9.3_3_601&bd_page_type=1"]) {

//小测验: 当点击百度新闻这个链接的时候让view上出现一个红色的View,与此同时返回值NO,则不加载网页.        
        UIView * redView = [[UIView alloc] init];
        redView.backgroundColor = [UIColor redColor];
        redView.frame = CGRectMake(30, 30, 200, 200);
        [self.view addSubview:redView];

        /** 
         1.return NO 取消网页定向(不加载网页),只用自定义点击事件
         2.return YES 既用自定义点击事件,又用网页跳转(定向/加载网页)
         */
        return NO;
    }
    return YES;
}
- (void)webViewDidStartLoad:(UIWebView *)webView{


}

/** 
 1.Oc调用js 
 2.加载完毕后调用,或者通过用户事件(点击,触摸等等)调用.
 3.注入代码:
    a.context 调用 evaluateScript:(js代码)
    b.webView 调用 stringByEvaluatingJavaScriptFromString:(js代码)
 */
- (void)webViewDidFinishLoad:(UIWebView *)webView{

    /** js代码 */
//    NSString * alertView = @"alert('oc调js')";
//    JSContext * context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
//直接通过context注入代码执行js的代码
//    [context evaluateScript:alertView];
//通过webVIew执行js代码
//    [webView stringByEvaluatingJavaScriptFromString:alertView];
}
- (void)webView:(UIWebView *)webView didFailLoadWithError:(nullable NSError *)error{

}

- (void)viewDidLoad {
    [super viewDidLoad];

    /** init clickBtn */
//初始化一个button来让用户点击button的时候调用js的吗
    UIButton * btn = [[UIButton alloc] init];
    [btn setTitle:@"点我" forState:UIControlStateNormal];
    [btn addTarget:self action:@selector(clickBtn) forControlEvents:UIControlEventTouchUpInside];
    [btn setBackgroundColor:[UIColor redColor]];
    btn.frame = CGRectMake(0, 20, 30, 80);
    [self.view addSubview:btn];

    /** init self.webView */
    self.webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 50, kScreenW, kScreenH)];
    [self.view addSubview:self.webView];
    self.webView.delegate = self;
    NSString * urlStr = @"https://www.baidu.com";
    NSURL * url = [NSURL URLWithString:urlStr];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    [self.webView loadRequest:request];
}

/** 点击button 时oc调用js */
-(void)clickBtn{

    JSContext * context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    NSString * jsStr = [NSString stringWithFormat:@"alert('%@')",@"这是哈哈"];
    [context evaluateScript:jsStr];
}

小结:oc调用js的一个方式 --- 注入代码,两个实现方式:通过context 或者 webView来注入js代码调用js中的方法.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值