访问UIWebView的JavaScriptCore引擎

时间:2013-10-29 16:40:44

标签: ios objective-c uiwebview javascriptcore

我刚刚在iOS7中发现了一个新的框架:JavaScriptCore。

它看起来很棒,但是如何访问UIWebView的运行时/上下文?

3 个答案:

答案 0 :(得分:11)

这没有官方机制。但我知道有两种方法可以获得JSContext。我可能不会在运送应用程序中使用它。

  1. 使用KVC访问内部UIWebView属性。在此博客文章中详细解释:http://blog.impathic.com/post/64171814244/true-javascript-uiwebview-integration-in-ios7
  2. JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
    
    1. 通过类别向NSObject添加魔术方法。在此更详细地解释:https://github.com/TomSwift/UIWebView-TS_JavaScriptContext
    2. @implementation NSObject (magic)
      - (void) webView: (id) unused didCreateJavaScriptContext: (JSContext*) ctx forFrame: (id) frame
      {
          // ...
      }
      @end
      

答案 1 :(得分:2)

您可能希望在开发人员网站(https://developer.apple.com/wwdc/videos/)上查看WWDC 2013会话视频,特别是“将JavaScript集成到本机应用程序中”,以引用描述“引入新的Objective-C API”到JavaScriptCore。iOS开发人员现在可以将脚本集成到他们的应用程序中,而无需捆绑自定义语言解释器。此API建立在Mac上可用的JavaScriptCore的现有C API之上,并使用JavaScript进行编程更容易,更不容易出错。“ 有一节与WebView一起使用,例如使用:-webView:didCreateJavaScriptContext:forFrame:

答案 2 :(得分:0)

存在JavaScriptCore,以便开发人员可以使用Objective-C中的JavaScript运行时。我知道访问UIWebView运行时的唯一方法是通过stringByEvaluatingJavaScriptFromString:方法,这显然不是很灵活。