【发布时间】:2013-11-08 23:04:18
【问题描述】:
我刚刚在 iOS7 中发现了一个可用的新框架:JavaScriptCore。
看起来很棒,但我如何访问 UIWebView 的运行时/上下文?
【问题讨论】:
标签: ios objective-c uiwebview javascriptcore
我刚刚在 iOS7 中发现了一个可用的新框架:JavaScriptCore。
看起来很棒,但我如何访问 UIWebView 的运行时/上下文?
【问题讨论】:
标签: ios objective-c uiwebview javascriptcore
对此没有官方机制。但是我知道有两种方法可以获得JSContext。我可能不会在运输应用中使用任何一种。
UIWebView 属性。在这篇博文中有详细解释:http://blog.impathic.com/post/64171814244/true-javascript-uiwebview-integration-in-ios7
JSContext *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
【讨论】:
您可能想查看开发者网站 (https://developer.apple.com/wwdc/videos/) 上的 WWDC 2013 会议视频,特别是“将 JavaScript 集成到本机应用程序”中引用描述“向@引入新的 Objective-C API 987654322@。iOS 开发人员现在可以将脚本集成到他们的应用程序中,而无需捆绑自定义语言解释器。此 API 建立在 Mac 上现有的 JavaScriptCore 的 C API 之上,使使用 JavaScript 进行编程更容易,更不容易出错。”
有一节介绍如何将其与WebView 一起使用,例如使用:-webView:didCreateJavaScriptContext:forFrame:
【讨论】:
JavaScriptCore 的存在使开发人员可以从 Objective-C 中使用 JavaScript 运行时。我知道访问 UIWebView 运行时的唯一方法是通过 stringByEvaluatingJavaScriptFromString: 方法,这显然不是很灵活。
【讨论】: