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

转载 iOS中js与objective-c的交互

2014-08-01 21:02 381 查看
因为在iOS中没有WebKit.Framework这个库的,所以也就没有 windowScriptObject对象方法了。要是有这个的方法的话 

就方便多了,(ps:MacOS中有貌似) 

现在我们利用其他方法去达到js与objective-c的交互效果。 

首先是objective-c调用js中的代码,可以用uiwebview中的一个方法 

stringByEvaluatingJavaScriptFromString:后面接的是js中的方法名。这个函数的返回值就是所调用js方法 

的返回值。 

而在js调用objective-c的方法就没那么简单了, 

在js中的代码应该这么做: 

function testFunc(cmd,parameter1) 



    alert(1); 

    document.write(Date()); 

    document.location="objc://"+cmd+":/"+parameter1;  //cmd代表objective- 

c中的的方法名,parameter1自然就是参数了 



而在objective-c中,也是利用uiwebview的一个方法, 
- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest: 
(NSURLRequest*)request navigationType: 
(UIWebViewNavigationType)navigationType //这个方法是网页 

中的每一个请求都会被触发的 



    NSString *urlString = [[request URL] absoluteString]; 

    NSArray *urlComps = [urlString 

componentsSeparatedByString:@"://"]; 

    if([urlComps count] && [[urlComps objectAtIndex:0] 

isEqualToString:@"objc"]) 

    { 

        NSArray *arrFucnameAndParameter = [(NSString*)[urlComps 

objectAtIndex:1] componentsSeparatedByString:@":/"]; 

        NSString *funcStr = [arrFucnameAndParameter objectAtIndex:0]; 

        if (1 == [arrFucnameAndParameter count]) 

        { 

            // 没有参数 

            if([funcStr isEqualToString:@"doFunc1"]) 

            { 

                 

                NSLog(@"doFunc1"); 

            } 

        } 

        else if(2 == [arrFucnameAndParameter count]) 

        { 

            //有参数的 

            if([funcStr isEqualToString:@"doFunc1"] && 

[arrFucnameAndParameter objectAtIndex:1]) 

            { 

                

                NSLog(@"doFunc1:parameter"); 

            } 

        } 

        return NO; 

    }; 

    return YES; 



这个方法是可以达到js调用本地objective-c的方法,可惜没办法把返回值返回给js,所以还是要绕过 
stringByEvaluatingJavaScriptFromString:这个弯,用 

stringByEvaluatingJavaScriptFromString:函数去掉js的方法,把返回值当做js方法中的参数形式传回去给 

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