Date post: | 18-Nov-2014 |
Category: |
Documents |
Upload: | lin-luxiang |
View: | 3,000 times |
Download: | 0 times |
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日星期日