注册 登录
主题 : 求助:ios UIWebView通过javascript调用本地api
级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
0 楼:  发表于: 2012-04-17 19:51    发自: Web Page

求助:ios UIWebView通过javascript调用本地api   

大家好,谁知道如何利用UIWebView通过javascript调用本地api呢,比如通过javascript调用本地的拍照功能、罗盘、磁力计、文件操作等等。
跪求大神指引啊!!!
小弟万分感激!
级别: 圣骑士
UID: 68588
精华: 0
发帖: 377
可可豆: 2042 CB
威望: 1992 点
在线时间: 140(时)
注册时间: 2011-05-08
最后登录: 2014-07-19
1 楼:  发表于: 2012-04-17 20:06    发自: Web Page
webview delegate截获webrequest
然后在js发起的请求里用超链接模拟
<a href="obj-c:menthod()"></a>
或者window.href('obj-c:method()')
我是这么做来截获请求然后判断的。
至于前缀想怎么设置都ok。。。。我是用obj-c

级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
2 楼:  发表于: 2012-04-18 07:55    发自: Web Page
回 1楼(cincas) 的帖子
假如我想调用摄像头功能的话,是不是应该这样写:<a href =  "obj-c: takePicture()"> </a>或window.href("obj-c:takePicture()")。还有就是这样调用后UIImagePickerController 的delegate会执行吗???

1.- (void)takePicture{
2.
3.UIImagePickerController *picker = [[UIImagePickerController alloc] init];
4.
5.if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
6.picker.sourceType = UIImagePickerControllerSourceTypeCamera;
7.NSArray *temp_MediaTypes = [UIImagePickerController availableMediaTypesForSourceType:picker.sourceType];
8.picker.mediaTypes = temp_MediaTypes;
9.picker.delegate = self;
10.picker.allowsImageEditing = YES;
11.}
12.
13.[self presentModalViewController:picker animated:YES];
14.[picker release];
15.
16.}

级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
3 楼:  发表于: 2012-04-18 08:00    发自: Web Page
回 2楼(zhang_cn) 的帖子
是不是当这个<a href="obj-c:menthod()"></a>超链接被点击了后,webview的delegate方法就会执行,然后截获请求并进行分析,如果是object-c就调用对应的方法,比如我上面回复中的拍照功能,可以这么理解吗???谢谢


级别: 新手上路
UID: 122382
精华: 0
发帖: 14
可可豆: 140 CB
威望: 140 点
在线时间: 31(时)
注册时间: 2012-02-08
最后登录: 2012-09-21
4 楼:  发表于: 2012-04-18 08:21    发自: Web Page
求解???
级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
5 楼:  发表于: 2012-04-18 10:07    发自: Web Page
大神呢???
级别: 圣骑士
UID: 68588
精华: 0
发帖: 377
可可豆: 2042 CB
威望: 1992 点
在线时间: 140(时)
注册时间: 2011-05-08
最后登录: 2014-07-19
6 楼:  发表于: 2012-04-18 20:19    发自: Web Page
回 3楼(zhang_cn) 的帖子
UIWebView 的 delegate 有这么一个方法
shouldLoadRequest
具体名称忘记了
这个方法回在UIWebView每次发生request前调用,从而判断是否调用这个request
而之前说的就是通过这个来判断是否发生了js调用obj-c的方法

可以通过获得request的NSUrl从而获得urlString
然后判断urlString是否hasPrefix obj-c
如果有的话,就获得方法名,从而调用方法

这种方案不是js直接调用oc的方法的。。。
级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
7 楼:  发表于: 2012-04-19 08:00    发自: Web Page
回 6楼(cincas) 的帖子
哦,知道了,谢谢。也就是直接通过UIWebView的delegate方法和Objective-c交互,那请问有没有js和oc直接交互的方法???
级别: 圣骑士
UID: 68588
精华: 0
发帖: 377
可可豆: 2042 CB
威望: 1992 点
在线时间: 140(时)
注册时间: 2011-05-08
最后登录: 2014-07-19
8 楼:  发表于: 2012-04-19 08:07    发自: Web Page
回 7楼(zhang_cn) 的帖子
就我的大脑所知...木有...
可以试试用封装好的第三方库, 已经提供了完整的JS和OC代码.

级别: 骑士
UID: 23921
精华: 0
发帖: 161
可可豆: 1439 CB
威望: 1439 点
在线时间: 198(时)
注册时间: 2010-07-05
最后登录: 2014-03-12
9 楼:  发表于: 2012-04-19 12:00    发自: Web Page
回 8楼(cincas) 的帖子
能否提供几个这样的库,谢谢了

CocoaChina社区转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系社区进行修改或删除【联系方式QQ : 3442093904 邮箱:support@cocoachina.com】文章内容为作者独立观点,不代表CocoaChina社区立场。版权归原作者所有,如申请授权请联系作者,因文章侵权CocoaChina社区不承担任何法律及连带责任。

描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部