可以调用Objective-C函数将值返回给javascript吗?
我想在iOS Objective-C webview应用程序中使用JavaScriptCore/JSContext向javascript函数返回一个值 例如,在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甚至可
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以适应它。但是很令人沮丧。谢谢你的回复。