是否可以调用一个将值返回给javascript的Objective-C函数?

时间:2017-12-06 02:12:10

标签: javascript ios objective-c uiwebview javascriptcore

我想在iOS Objective-C webview应用程序中使用JavaScriptCore / JSContext将值返回给javascript函数。

例如,在javascript:var retVal = myObjC.returnSomething();

其中returnSomething是Objective-C函数。为了便于讨论,我们假设它将字符串返回给javascript函数。

我已经能够调用不会返回值的Objective-C函数,但却无法找到任何描述如何返回值的函数。

使用JavaScriptCore甚至可以实现这一点,还是我对此采取了错误的方法?我需要javascript来等待返回值(同步)。

1 个答案:

答案 0 :(得分:2)

正如您所期望的那样,将数据从obj C传递到JS使用 stringByEvaluatingJavaScriptFromString /将数据从JS传递到Obj C使用 JSContext

<!-- save as .html and load into UIWebview -->

    <!DOCTYPE html>
    <html>
    <head>
    <script>
    function loadData(x){
    alert(x);
    }    
    function myMeg(){   
    passDatatoObjC("success");    
    }
    </script>
    </head>
    </html>

    function returnSomething(x){
    loadData(x);
    }

    function passDatatoObjC(x){
    passDatatoObjC(x);    
    }

    #pragma mark - UIWebview dataource

    -(void)webViewDidFinishLoad:(UIWebView *)webView{

      [self.svgWebMapView   stringByEvaluatingJavaScriptFromString:@"returnSomething(10)"];

      JSContext *context =  [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    context[@"passDatatoObjC"] = ^(NSString *msg) {
    NSLog(@"%@",msg);

    });
    }