【问题标题】:Calling Javascript in an iOS web app from Objective-C从 Objective-C 在 iOS Web 应用程序中调用 Javascript
【发布时间】:2011-05-10 00:31:22
【问题描述】:

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

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

【问题讨论】:

    标签: javascript ios objective-c


    【解决方案1】:

    嗯,你可以打电话

    -[UIWebView stringByEvaluatingJavaScriptFromString:]

    任何时候都可以,而不仅仅是响应委托方法。

    【讨论】:

    • 天哪,我已经知道了。哈,这里真的很晚了,我已经因为不得不重新开始这个项目而完全忘记了而让自己陷入恐慌。谢谢。我现在可以上床休息了。
    【解决方案2】:

    可以使用 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
    

    这是一个演示:

    https://github.com/evgenyneu/ios-javascriptcore-demo

    【讨论】:

      【解决方案3】:

      您可以在加载 webview 后通过简单地在 webview 上使用 stringByEvaluatingJavaScriptFromString 方法来调用 webview 中的任何 javascript 函数:

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

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

      【讨论】:

        【解决方案4】:

        难道你不能通过执行“loadRequest”来做到这一点,并传递一个 NSURL,内容如下:

        javascript:myFunction("MyParameter");
        

        它应该调用你的函数,而不是重新加载页面。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-15
          • 2013-01-11
          相关资源
          最近更新 更多