从Objective-C在iOS web应用程序中调用Javascript

从Objective-C在iOS web应用程序中调用Javascript,javascript,ios,objective-c,Javascript,Ios,Objective C,我正在开发一个web应用程序,它显示在UIWebView中。应用程序是本地加载的,即不是从web服务器加载的。我通过UIWebViewDelegate协议中的shouldStartLoadWithRequest:方法从Javascript与ObjC通信 我最不需要的是能够从ObjC调用Javascript函数,而无需重新加载任何页面。我希望这是可能的。您是否可以通过执行“loadRequest”并向其传递一个包含以下内容的NSURL来做到这一点: javascript:myFunction("M

我正在开发一个web应用程序,它显示在
UIWebView
中。应用程序是本地加载的,即不是从web服务器加载的。我通过
UIWebViewDelegate
协议中的
shouldStartLoadWithRequest:
方法从Javascript与ObjC通信


我最不需要的是能够从ObjC调用Javascript函数,而无需重新加载任何页面。我希望这是可能的。

您是否可以通过执行“loadRequest”并向其传递一个包含以下内容的NSURL来做到这一点:

javascript:myFunction("MyParameter");
它应该调用您的函数,但不能重新加载页面。

好的,您可以调用

-[UIWebView stringByEvaluatingJavaScriptFromString:]


只要您愿意,而不仅仅是响应委托方法。

您可以在Web视图中调用任何javascript函数,只需在加载Web视图后在Web视图上使用stringByEvaluatingJavaScriptFromString方法即可:

[self.myWebView stringByEvaluatingJavaScriptFromString:@"myJavaScriptFunction(123.0)"];

发送此消息不需要重新加载webview(只需在完成之前不要释放webview即可)。

可以使用JavaScriptCore框架从Objective-C运行JavaScript代码

#import <JavaScriptCore/JavaScriptCore.h>

...

JSContext *context = [[JSContext alloc] init];
[context evaluateScript: @"function greet(name){ return 'Hello, ' + name; }"];
JSValue *function = context[@"greet"];
JSValue* result = [function callWithArguments:@[@"World"]];
[result toString]; // -> Hello, World
#导入
...
JSContext*context=[[JSContext alloc]init];
[context evaluateScript:@“函数问候(名称){return'Hello',+name;}”];
JSValue*function=context[@“问候”];
JSValue*result=[function callWithArguments:@[@“World”];
[结果字符串];//->你好,世界
下面是一个演示:


天哪,我早就知道了。哈,现在真的很晚了,我因为不得不重新开始这个项目而陷入恐慌,完全忘记了。谢谢我现在可以上床休息了。