H5研究二:OC与JS互调的趣味
来源:互联网 发布:淘宝个人信息资料出售 编辑:程序博客网 时间:2024/06/02 02:13
第一部分:OC调用js的方法
1.通过stringByEvaluatingJavaScriptFromString调用js中的方法
2. 在OC中通过JSContext 创建js环境 ,调用js方法 。然后通过
- (JSValue *)evaluateScript:(NSString *)script;
调用JS
区别:JS方法通过webView调用或者是JS方法通过JSContext调用 以及是否需要JavaScriptCore.framework
首先是第一种:通过stringByEvaluatingJavaScriptFromString调用js中的方法
JS方法写在Html
Html:
<html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> function showAlert(message){ alert(message); } </script></html>
OC代码:
这里并不需要JavaScriptCore.framework
#import "FirstViewController.h"@interface FirstViewController ()<UIWebViewDelegate>@property (weak, nonatomic) IBOutlet UIWebView *webView;@end@implementation FirstViewController- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _webView.backgroundColor = [UIColor redColor]; _webView.delegate = self; NSString *path = [[NSBundle mainBundle] pathForResource:@"First" ofType:@"html"]; NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:path]]; [_webView loadRequest:request]; UIBarButtonItem *rightItem = [[UIBarButtonItem alloc] initWithTitle:@"调JS" style:UIBarButtonItemStylePlain target:self action:@selector(rightAction)]; self.navigationItem.rightBarButtonItem = rightItem;}- (void)rightAction{ NSString *jsStr = [NSString stringWithFormat:@"showAlert('%@')",@"这里是JS中alert弹出的message"]; [_webView stringByEvaluatingJavaScriptFromString:jsStr];}
注意:showAlert('%@') 字符串与JS中的方法必须一致才能调用
第二种:在OC中通过JSContext 创建js环境 ,然后通过
- (JSValue *)evaluateScript:(NSString *)script;
调用JS
OC代码:
这里需要JavaScriptCore.framework
- (void)rightAction{ JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; NSString *textJS = @"showAlert('这里是JS中alert弹出的message')"; [context evaluateScript:textJS];}
第二部分:js调用oc的方法
1.shouldStartLoadWithRequest调用oc中的方法
2. 在OC中通过JSContext block回调
首先是第一种:shouldStartLoadWithRequest调用oc中的方法
//1,html页面的js动作触发时运行//2,shouldStartLoadWithRequest不仅在url变化的时候调用,而且只要网页内容变化的时候也能调用#pragma mark - UIWebViewDelegate- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
第二种:在OC中通过JSContext block回调
html:
<html> <header> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> function secondClick() { share('分享的标题','分享的内容','图片地址'); } </script> </header> <body> <button type="button" onclick="secondClick()">Click Me!</button> </body></html>
JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; //定义好JS要调用的方法, share就是调用的share方法名 context[@"share"] = ^() { NSLog(@"+++++++Begin Log+++++++"); NSArray *args = [JSContext currentArguments]; UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"方式二" message:@"这是OC原生的弹出窗" delegate:self cancelButtonTitle:@"收到" otherButtonTitles:nil]; [alertView show]; for (JSValue *jsVal in args) { NSLog(@"%@", jsVal.toString); } NSLog(@"-------End Log-------"); };
阅读全文
0 0
- H5研究二:OC与JS互调的趣味
- OC与JS的交互(iOS与H5混编)
- oc 和 h5中js 的交互
- OC与JS的互调
- OC与JS交互-二
- oc与h5交互
- iOS H5页面OC与JS简单交互
- iOS开发中OC与H5网页交互之OC传值给JS(WKWebView)
- iOS OC与H5网页交互之OC传值给JS(WKWebView)
- OC与JS交互WKWeView(二)
- iOS开发过程中H5与OC的交互
- 利用JS 事件 与 Cnavas绘图 以及 H5 缓存写的一个手势解锁(二)
- OC与JS的交互
- JS与OC的交互
- OC与JS的交互
- JS 与 OC 的 交互
- H5与android原生的JS交互
- js与h5的结合,初步学习。
- SpringMVC(二)
- Day15-servlet
- nginx 访问404配置
- 各个端口的总结
- markdown基础
- H5研究二:OC与JS互调的趣味
- LintCode-玩具工厂(Java工厂模式)
- SICP-2-序列
- Linux常用命令
- C++类和对象:四个默认函数和运算符重载
- Leetcode_342_Power of Four
- 树莓派3B安装64位系统
- 关于动态生成dom绑定事件失效的原因及解决和live()
- java反射