您的位置:首页 > 移动开发

iphone UIWEBVIEW JS回调交互

2011-10-18 10:45 260 查看
1. 一般调用

将本地数据,封装,直接作为JS的返回值。如:获取软件的APPCode

//获取APPCode

NSArray *_plist_paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString *_plist_paths_path=[_plist_paths objectAtIndex:0];

NSArray *_plist_array= [_plist_paths_path componentsSeparatedByString:@"/"];

NSString *_appcode=[[NSString alloc]init];

for (NSString *item in _plist_array) {

if ([item length]==36) {

_appcode=item;

break;

}

}

NSLog(@"current appcode:%@",_appcode);

//注入到js中

NSMutableString *_getApkCode=[[NSMutableString alloc]init];

[_getApkCode appendFormat:@" function _getApkCode(){"];

[_getApkCode appendFormat:@"return '%@';",_appcode];

[_getApkCode appendString:@" }"];

[self.webView stringByEvaluatingJavaScriptFromString:_getApkCode];

[_getApkCode release];

2.需要跟平台进行交互调用

思路:

1.制造含有一定含义的请求如:(location.href="download");

2.在方法:-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType中,拦截:

//testMall:http://192.168.1.20:8083本地测试页面地址

NSString *pre_download=[NSString stringWithFormat:@"%@downLoad",testMall];

if([url hasPrefix:pre_download])

{

//下载代码。。。。

}

3. 注意事项

a.存在Iframe嵌套的页面,js注入

页面注入JS是注入到,浏览器的html中,对于内部嵌套iframe框架的页面,则无法调用到js。此时相当于调用父页面的JS。
可以通过parent+方法名,来调用你注入的JS。parent.parent的使用个数,可以是多个,不影响js的执行,如果少用parent,可能会导致,调不到你注入的JS

b.存在交互的处理方法。推荐使用方法,iphone只负责提供js接口,不调用html内部或其他的js接口

示例:
html
function addDownload()
{

url='www.XXX.XXX.zip';
download(url);//调用iphone提供的js接口
addDownloadTask_ret();//获取iphone下载接口执行的下载结果,此处调的是本地的一个延迟方法

}
//获取iphone下载接口执行的下载结果
function addDownloadTask_ret()

{

var obj=getDownloadTaskResult();//此处为iphone提供的接口,负责返回当前下载执行情况的结果

if(''!=obj||undefined!=obj)

{

//调用本地的一些后续处理方法。

}

else

{

setTimeout("addDownloadTask_ret2();",1000);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: