Доступ к движку JavaScriptCore UIWebView

Я только что обнаружил новую платформу, доступную в iOS7: JavaScriptCore.

Это выглядит потрясающе, но как я могу получить доступ к среде выполнения / контексту UIWebView?

3 ответа

Официального механизма для этого нет. Но есть два подхода, которые я знаю о том, чтобы получить 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

Возможно, вы захотите посмотреть видео сессий WWDC 2013 на веб-сайте разработчика ( https://developer.apple.com/wwdc/videos/) и, в частности, "Интегрирование JavaScript в собственные приложения", которое приведено в описании "Введение новый Objective-C API для JavaScriptCore, Разработчики iOS теперь могут интегрировать скрипты в свои приложения, не прибегая к связыванию пользовательских языковых интерпретаторов. Этот API основывается на существующем C API для JavaScriptCore доступно на Mac и делает программирование на JavaScript намного проще и менее подвержено ошибкам."Есть раздел об использовании его с WebView например, используя: -webView:didCreateJavaScriptContext:forFrame:

JavaScriptCore существует, так что разработчики могут использовать среду выполнения JavaScript из Objective-C. Единственный способ получить доступ к среде выполнения UIWebView - через stringByEvaluatingJavaScriptFromString: метод, который, очевидно, не очень гибок.

Другие вопросы по тегам