访问UIWebView的JavaScriptCore引擎

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

它看起来很棒,但我怎样才能访问UIWebView的运行时/上下文?

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

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

您可能会喜欢在开发者网站( https://developer.apple.com/wwdc/videos/ )上查看WWDC 2013会话video,特别是“将JavaScript集成到原生应用程序中”,其中引用了“引入为JavaScriptCore了一个新的Objective-C API,iOS开发人员现在可以将脚本集成到他们的应用程序中,而无需绑定定制的语言解释器,这个APIbuild立在Mac上现有的C API to JavaScriptCore基础之上,不太容易出错“。 有一个与WebView使用它的部分,例如使用: -webView:didCreateJavaScriptContext:forFrame:

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