javaScript 与OC方法的调用
来源:互联网 发布:mac系统可以玩什么游戏 编辑:程序博客网 时间:2024/06/08 10:06
UIWebView
的浏览器的JavaScript
中, 没有相关的接口可以调用Objective-C
的相关方法. 一般采用JavaScript
在浏览器环境中发出URL
请求, Objective-C
截获请 求以获取相关请求的思路.在Objective-C
中在实现UIWebViewDelegate
,然后回调UIWebview的-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
函数,在上面这个函数中,通过截取NSURLRequest解析js中传递过来的参数,再根据参数来选择早已定义好的方法。
2、JavaScriptCore
, 使的JavaScript
和 Objective-C
可以互操作.
test.html
<html>
<head lang="en">
<meta charset="UTF-8">
</head>
<body>
<div>
<input type="button" value="CallCamera" onclick="callCamera()">
</div>
<script>
function callCamera() {
jakilllog("hello world");
}
</script>
</body>
</html>
//点击button调用OC的方法
#import <JavaScriptCore/JavaScriptCore.h>
#import "ViewController1.h"
#import <WebKit/WebKit.h>
@protocol JSObjcDelegate <JSExport>
- (void)callCamera;
- (void)share:(NSString *)shareString;
- (void)push;
@end
@interface ViewController ()<UIWebViewDelegate,JSObjcDelegate,WKNavigationDelegate>
@property (nonatomic,strong) JSContext *jsContext;
@property (weak,nonatomic) IBOutlet UIWebView *myWebView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSURL *url = [[NSBundle mainBundle] URLForResource:@"test2" withExtension:@"html"];
self.myWebView.delegate = self;
[self.myWebView loadRequest:[[NSURLRequest alloc] initWithURL:url]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView{
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];//获取webView的javaScript环境
//Block 方法
self.jsContext[@"jakilllog"] = ^() {
NSLog(@"Begin Log");
NSArray *args = [JSContext currentArguments];
for (JSValue *jsVal in args) {
NSLog(@"%@", jsVal);
}
JSValue *this = [JSContext currentThis];
NSLog(@"-------End Log-------");
};
}在定义的webview中,如果使用js执行log这个函数,会调用上面oc中block段代码
// delegate 方法
- (void)webViewDidFinishLoad:(UIWebView *)webView{
self.jsContext = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSLog(@"%@",self.jsContext);
self.jsContext[@"Toyun"] = self;
self.jsContext.exceptionHandler = ^(JSContext *context,JSValue *exceptionValue){
context.exception = exceptionValue;
NSLog(@"异常信息:%@",exceptionValue);
};
}
- (void)callCamera{
NSLog(@"callCamera");
// 获取到照片之后在回调js的方法picCallback把图片传出去
JSValue *picCallback = self.jsContext[@"picCallback"];
[picCallback callWithArguments:@[@"myPhotos"]];
}
- (void)share:(NSString *)shareString{
NSLog(@"share:%@", shareString);
// 分享成功回调js的方法shareCallback
JSValue *shareCallback = self.jsContext[@"shareCallback"];
[shareCallback callWithArguments:nil];
}
- javaScript 与OC方法的调用
- JavaScript与OC的相互调用
- OC 类方法的调用
- JavaScript与OC的交互
- swift与OC混编(方法调用)
- JS与原生OC互相调用方法
- OC与swift混编-oc中调用swift方法
- swift调用oc类文件的方法
- oc中如何调用c++的方法
- OC的方法调用-和Java对比
- swift 调用第三方的oc 方法
- 前端直接调用OC的native方法
- iOS与JS交互,OC调用JS方法,JS调用OC方法,URL解码
- swift与oc的互相调用
- JS调用OC的理解与总结
- OC与swift的相互调用
- OC与Swift语言的相互调用
- OC与JS之间的相互调用
- Java笔记--WEB中的四个域对象
- 对象的比较与排序(四):对象的相等判断Equals和IEquatable<T>(转)
- [OpenGL ES 02]OpenGL ES渲染管线与着色器
- 关于在调用本地数据库报错
- 调试相机采集的时候,程序报错跳入反汇编
- javaScript 与OC方法的调用
- Enumeration接口和Iterator接口
- 第 1 章 简单认识 JavaScript
- 设计模式:桥接模式
- socket
- Css3绘制圆形
- 修改Toolbar/Actionbar的图标
- VC6 && VS2010 环境变量
- x-www-form-urlencoded与multipart/form-data区别