iOS中js与objective-c的交互

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"οnclick="testFunction1('printLog:','str')">调用本地带参数的方法</button></p>
        <p><button type="text" id="text2" value="点击这里2"οnclick="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调用本地不带参数的方法成功!");
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值