2011-09-26 40 views
0

任何想法如何从OBJ-C调用和发送参数给JS功能?iPhone:从OBJ-C调用并发送参数给JS功能

让我的html说我有JS

功能showPieChart(参数1,参数){...}

,并从我的OBJ C类在viewDidLoad中我要调用此函数。任何想法或例子?在此先感谢...

回答

3

添加这在UIWebViewDelegate的webViewDidFinishLoad:

NSString *functionCall = [NSString stringWithFormat:@"showPieChart(%@,%@)", param1, param2]; 
NSString *result = [webView stringByEvaluatingJavaScriptFromString:functionCall]; 

要设置视图控制器作为一个UIWebView的委托,您必须将<UIWebViewDelegate>协议添加到@interface标题和链接UIWebView的委托字段添加到视图控制器。

如果你的参数是一个数组里面,你可以一次通过一个与[array objectForIndex:i](i是对每个参数的指数)或全部提取出来一个与componentsJoinedByString:

NSArray *params = [NSArray arrayWithObjects:@"a",@"b",nil]; 
NSString *functionCall = [NSString stringWithFormat:@"showPieChart(%@)", [params componentsJoinedByString:@","]]; 
+0

好吧,这对我的作品......但如果我的参数是数组呢?如何发送数组?这是可行的吗? – Jim

+0

查看答案更新。 – Jano

+0

非常感谢!!!! – Jim

0

我猜你有带有加载网页的UIWebView。为了执行JavaScript,这样做:

NSString *result = [_webView stringByEvaluatingJavaScriptFromString:@"showPieChart()"]; 
1

1)实施UIWebViewDelegate

2)重写

- (BOOL)webView的:(UIWebView的*)aWebView shouldStartLoadWithRequest:(的NSURLRequest *)要求导航类型:(UIWebViewNavigationType)导航类型方法..

3)在此方法中,您将请求与定义的协议进行比较。

实施例:

的NSString * requestString = [[请求URL] absoluteString]; NSArray * components = [requestString componentsSeparatedByString:@“:”];

if ([components count] > 1 && 
    [(NSString *)[components objectAtIndex:0] isEqualToString:@"myapp"]) { 
    if([(NSString *)[components objectAtIndex:1] isEqualToString:@"myfunction"]) 
    { 

     NSLog([components objectAtIndex:2]); // param1 
     NSLog([components objectAtIndex:3]); // param2 
     // Call your method in Objective-C method using the above... 
    } 
    return NO; 
} 

4)修改JavaScript文件以创建protocole:

功能showPieChart(参数1,参数) { 了window.location = “MyApp的:” + “myfunction的:” +参数1 +“: “+ param2;

}

种源:HTTP://www.codingventures.com/2008/12/using-uiwebview-to-render-svg-files/