javascript call objc
DESCRIPTION
A way of calling objc function from js in UIWebView.TRANSCRIPT
iOS dev HACK!JS调用ObjC
11年1月23日星期日
源起
11年1月23日星期日
源起
HTML做界面很爽
11年1月23日星期日
源起
HTML做界面很爽
JS相对Objc慢
11年1月23日星期日
源起
HTML做界面很爽
JS相对Objc慢
UIWebView功能弱
11年1月23日星期日
方法一
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
}
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name
11年1月23日星期日
方法一
在JS的Global中强势插入对象。
- (void)webView:(id)sender didClearWindowObject:(id)windowObject forFrame:(WebFrame*)frame {
! [windowObject setValue:localcall forKey:@"localcall"];
}
+ (BOOL)isSelectorExcludedFromWebScript:(SEL)aSelector
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name
11年1月23日星期日
失败原因
11年1月23日星期日
失败原因
Apple限制了方法的调用。
11年1月23日星期日
失败原因
Apple限制了方法的调用。
在+ (BOOL)isSelectorExcludedFromWebScript:
(SEL)aSelector中,aSelector为空。
11年1月23日星期日
方法二
11年1月23日星期日
方法二
既然方法调用不成功,那么通过访问属性触发
可行吗?
11年1月23日星期日
方法二
既然方法调用不成功,那么通过访问属性触发
可行吗?
触发完成以后,通过设置属性返回值。
11年1月23日星期日
方法二
既然方法调用不成功,那么通过访问属性触发
可行吗?
触发完成以后,通过设置属性返回值。
11年1月23日星期日
失败原因
11年1月23日星期日
失败原因
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name 这是个类方法,无法发送消息给实例。
11年1月23日星期日
失败原因
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name 这是个类方法,无法发送消息给实例。
静态方法只能访问静态值。
11年1月23日星期日
失败原因
+ (BOOL)isKeyExcludedFromWebScript:(const char *)name 这是个类方法,无法发送消息给实例。
静态方法只能访问静态值。
静态值不能在JS中被访问到。
11年1月23日星期日
方法三
11年1月23日星期日
方法三
模拟RPC。
11年1月23日星期日
方法三
模拟RPC。
利用类似http://localcall/func_name?
argument=”a_json_string”进行方法调用。
11年1月23日星期日
方法三
模拟RPC。
利用类似http://localcall/func_name?
argument=”a_json_string”进行方法调用。
11年1月23日星期日
Ajax方式
11年1月23日星期日
Ajax方式
提交XMLHttpRequest请求。
11年1月23日星期日
Ajax方式
提交XMLHttpRequest请求。
截获请求并处理。
11年1月23日星期日
Ajax方式
提交XMLHttpRequest请求。
截获请求并处理。
一般的方法无法截取,必须通过截取Cache。
11年1月23日星期日
Ajax方式
提交XMLHttpRequest请求。
截获请求并处理。
一般的方法无法截取,必须通过截取Cache。
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
11年1月23日星期日
Callback方式
11年1月23日星期日
Callback方式
直接更改window.location.href
11年1月23日星期日
Callback方式
直接更改window.location.href
截获请求
11年1月23日星期日
Callback方式
直接更改window.location.href
截获请求
- (BOOL)webView:(UIWebView *)webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType。
11年1月23日星期日
Callback方式
直接更改window.location.href
截获请求
- (BOOL)webView:(UIWebView *)webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType。
仅有这个是不够的,因为[webview loadData]无法正确返回结果。
11年1月23日星期日
Callback方式
直接更改window.location.href
截获请求
- (BOOL)webView:(UIWebView *)webView2 shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType。
仅有这个是不够的,因为[webview loadData]无法正确返回结果。
- (NSString *)stringByEvaluatingJavaScriptFromString:(NSString *)script;
11年1月23日星期日
其他方式
Form表单提交
Iframe
Script标签
原理都一样,不能用webview截取的请求,就利
用cache截取。
11年1月23日星期日
高潮
11年1月23日星期日
高潮
Read The F**king SourceCode.
https://github.com/linluxiang/JavascriptCallObjCExample
11年1月23日星期日