iOS - oc与js交互的几种方式(1)
2016-06-15 12:18
591 查看
oc调用js代码两种方式
1.通过webVIew调用
2.通过JSContext调用
演示代码
小结:oc调用js的一个方式 --- 注入代码,两个实现方式:通过context 或者 webView来注入js代码调用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中的方法.
相关文章推荐
- Extjs4.0 最新最全视频教程
- Javascript中toFixed方法的改进
- 5个常见可用性错误和解决方案
- js数组实现图片轮播
- js可突破windows弹退效果代码
- JSP脚本漏洞面面观
- 使用BAT一句话命令实现快速合并JS、CSS
- js显示当前星期的起止日期的脚本
- 爆炸式的JS圆形浮动菜单特效代码
- js select常用操作控制代码
- JS实现不使用图片仿Windows右键菜单效果代码
- 从jsp发送动态图像
- 原生js结合html5制作小飞龙的简易跳球
- js 页面模块自由拖动实例
- js实现小鱼吐泡泡在页面游动特效
- js 提交和设置表单的值
- PHP VBS JS 函数 对照表
- node.js抓取并分析网页内容有无特殊内容的js文件
- PHP+JS实现大规模数据提交的方法
- 仿51JOB的地区选择效果(可选择多个地区)