1、首先是objective-c调用js中的代码,可以用UIWebview中的一个方法 stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法 的返回值。 比如调用js中方法myFunction(),可以在代码中调用NSString *str = [self.webviewstringByEvaluatingJavaScriptFromString:@"myFunction();"];
2、js调用objective-c的方法就没那么简单了
首先在js中声明方法
- <html>
- <head>
- <meta http-equiv="content-type"content="text/html;charset=utf-8">
- <title>js调用oc</title>
- <script type="text/javaScript">
- /* 调用本地带参数的方法 */
- function testFunction1(cmd,parameter1){
- return document.location="objc://"+cmd+":/"+parameter1; //cmd代表objective-c中的的方法名,parameter1自然就是参数了
- }
- /* 调用本地不带参数的方法 */
- function testFunction2(cmd){
- return document.location="objc://"+cmd; //cmd代表objective-c中的的方法名
- }
- </script>
- </head>
- <body>
- <p><button type="text" id="text1" value="点击这里1"onclick="testFunction1('printLog:','str')">调用本地带参数的方法</button></p>
- <p><button type="text" id="text2" value="点击这里2"onclick="testFunction2('testFunc')">调用本地不带参数的方法</button></p>
- </body>
- </html>
再调用webview代理
- - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
- {
- NSString *urlString = [[request URL] absoluteString];
- NSArray *urlComps = [urlStringcomponentsSeparatedByString:@"://"];
- if([urlComps count] && [[urlCompsobjectAtIndex:0] isEqualToString:@"objc"])
- {
- NSArray *arrFucnameAndParameter = [(NSString*)[urlCompsobjectAtIndex:1] componentsSeparatedByString:@":/"];
- NSString *funcStr = [arrFucnameAndParameterobjectAtIndex:0];
- if (1 == [arrFucnameAndParametercount])
- {
- // 没有参数
- if([funcStr isEqualToString:@"testFunc"])
- {
- /*调用本地函数*/
- [self testFunc];
- }
- }
- else if(2 == [arrFucnameAndParametercount])
- {
- //有参数的
- if([funcStr isEqualToString:@"printLog:"] && [arrFucnameAndParameterobjectAtIndex:1])
- {
- /*调用本地函数*/
- [self printLog:@"js调用本地带参数的方法成功!"];
- }
- }
- return NO;
- };
- return YES;
- }
- - (void)printLog:(NSString *)str
- {
- NSLog(@"%@", str);
- }
- - (void)testFunc
- {
- NSLog(@"js调用本地不带参数的方法成功!");
- }