I just discovered a new framework available in iOS7: JavaScriptCore.
It looks awesome, but how can I access the runtime/context of a UIWebView
?
I just discovered a new framework available in iOS7: JavaScriptCore.
It looks awesome, but how can I access the runtime/context of a UIWebView
?
There is no official mechanism for this. But there are two approaches I know about to get the JSContext
. I probably wouldn't use either in a shipping app.
UIWebView
properties. Explained in detail in this blog post: http://blog.impathic.com/post/64171814244/true-javascript-uiwebview-integration-in-ios7JSContext *ctx = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];
NSObject
via a category. Explained in more detail, here: https://github.com/TomSwift/UIWebView-TS_JavaScriptContext@implementation NSObject (magic)
- (void) webView: (id) unused didCreateJavaScriptContext: (JSContext*) ctx forFrame: (id) frame
{
// ...
}
@end
You might like to look at the WWDC 2013 Session Videos on the developer web-site (https://developer.apple.com/wwdc/videos/) and in particular 'Integrating JavaScript into Native Apps' which to quote the description "Introducing a new Objective-C API to JavaScriptCore
. iOS developers can now integrate scripting into their apps without having to bundle custom language interpreters. This API builds on top of the existing C API to JavaScriptCore
available on Mac, and makes programming with JavaScript much easier and less error-prone."
There is a section on using it with WebView
e.g. using: -webView:didCreateJavaScriptContext:forFrame:
JavaScriptCore exists so that developers have a JavaScript runtime to use from Objective-C. The only way I'm aware of to access the UIWebView runtime is through the stringByEvaluatingJavaScriptFromString:
method, which obviously isn't very flexible.
© 2022 - 2024 — McMap. All rights reserved.