Я только что обнаружил новый фреймворк, доступный в iOS7: JavaScriptCore.
Это выглядит потрясающе, но как я могу получить доступ к среде выполнения/контексту UIWebView
?
Я только что обнаружил новый фреймворк, доступный в iOS7: JavaScriptCore.
Это выглядит потрясающе, но как я могу получить доступ к среде выполнения/контексту UIWebView
?
Официального механизма для этого нет. Но я знаю два подхода к получению JSContext
. Я, вероятно, не стал бы использовать ни то, ни другое в приложении для доставки.
UIWebView
свойствам. Подробно описано в этом сообщении блога: http://blog.impathic.com/post/64171814244/true-javascript-uiwebview-integration-in-ios7JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
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 в нативные приложения», в котором цитируется описание «Представляем новый API Objective-C для JavaScriptCore
. Разработчики iOS теперь могут интегрировать сценарии в свои приложения, не имея для объединения пользовательских языковых интерпретаторов. Этот API построен на основе существующего API C для JavaScriptCore
доступного на Mac и делает программирование с помощью JavaScript намного проще и менее подверженным ошибкам». Существует раздел об использовании его с WebView
, например. используя: -webView:didCreateJavaScriptContext:forFrame:
JavaScriptCore существует для того, чтобы разработчики могли использовать среду выполнения JavaScript из Objective-C. Единственный известный мне способ доступа к среде выполнения UIWebView — это метод stringByEvaluatingJavaScriptFromString:
, который, очевидно, не очень гибкий.