iOS中js与objective-c的交互

来源:互联网 发布:亲润淘宝旗舰店 编辑:程序博客网 时间:2024/04/30 07:55

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"]) 
            { 

                /*调用本地函数1*/ 
                NSLog(@"doFunc1"); 

            } 
        } 
        else if(2 == [arrFucnameAndParameter count]) 
        { 
            //有参数的 
            if([funcStr isEqualToString:@"doFunc1"] && 
[arrFucnameAndParameter objectAtIndex:1]) 
            { 
               /*调用本地函数1*/ 
                NSLog(@"doFunc1:parameter"); 
            } 
        } 
        return NO; 
    }; 
    return YES; 



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

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


0 0
原创粉丝点击