可以调用Objective-C函数将值返回给javascript吗?

可以调用Objective-C函数将值返回给javascript吗?,javascript,ios,objective-c,uiwebview,javascriptcore,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甚至可

我想在iOS Objective-C webview应用程序中使用JavaScriptCore/JSContext向javascript函数返回一个值

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

其中
returnSomething
是Objective-C函数。为了便于讨论,假设它向javascript函数返回一个字符串

我能够调用不返回值的Objective-C函数,但无法找到任何描述如何返回值的内容


JavaScriptCore甚至可以做到这一点,还是我采取了错误的方法?我需要javascript等待返回值(同步)。

正如您所期望的,通过评估JavaScriptFromString将数据从obj C传递到JS useStringByEvaluating JavaScriptFromString/将数据从JS传递到obj C useJSContext

<!-- 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);

    });
    }

函数loadData(x){
警报(x);
}    
函数myMeg(){
passDatatoObjC(“成功”);
}
函数(x){
载荷数据(x);
}
函数passDatatoObjC(x){
passDatatoObjC(x);
}
#pragma标记-UIWebview数据源
-(无效)webViewDidFinishLoad:(UIWebView*)webView{
[self.svgWebMapView stringByEvaluatingJavaScriptFromString:@“returnSomething(10)”;
JSContext*context=[webView valueForKeyPath:@“documentView.webView.mainFrame.javaScriptContext”];
上下文[@“passDatatoObjC”]=^(NSString*msg){
NSLog(@“%@”,msg);
});
}

正如您所期望的,将数据从obj C传递到JS usestringByEvaluatingJavaScriptFromString/将数据从JS传递到obj C useJSContext

<!-- 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);

    });
    }

函数loadData(x){
警报(x);
}    
函数myMeg(){
passDatatoObjC(“成功”);
}
函数(x){
载荷数据(x);
}
函数passDatatoObjC(x){
passDatatoObjC(x);
}
#pragma标记-UIWebview数据源
-(无效)webViewDidFinishLoad:(UIWebView*)webView{
[self.svgWebMapView stringByEvaluatingJavaScriptFromString:@“returnSomething(10)”;
JSContext*context=[webView valueForKeyPath:@“documentView.webView.mainFrame.javaScriptContext”];
上下文[@“passDatatoObjC”]=^(NSString*msg){
NSLog(@“%@”,msg);
});
}

是的,我放弃了,只需使用
stringByEvaluatingJavaScriptFromString
并更改javascript以适应它。但是很令人沮丧。谢谢你的回复。是的,我放弃了,我将继续使用
stringByEvaluatingJavaScriptFromString
,并更改javascript以适应它。但是很令人沮丧。谢谢你的回复。