一.Objective-C调用javaScript
iOS 开发中,原生界面调用UIWebView 一般是通过 stringByEvaluatingJavaScriptFromString 这个方法来调用UIWebView 界面上的Javascript 代码的。方法很简单,用法更简单。只需要在UIWebView 的回调方法- (void)webViewDidFinishLoad:(UIWebView *)webView 之中直接调用 [self.webview stringByEvaluatingJavaScriptFromString:@"alert('do')"];
二.javaScript 调用 Objective-C
业界一般有如下两种方案:
1.曲线救国方案:
UIWebView 内发起的所有请求,都可以通过delegate函数在原生界面得到通知,于是我们可以在UIWebView 内发起一个特殊的网络请求,一般情况下请求的是一个虚拟地址(比喻说:gap://mathsjfos),主要是帮助我们在delegate方法中得到界面通知,完成逻辑调转。这- (void)webViewDidFinishLoad:(UIWebView *)webView 中 处理界面逻辑,然后可以通过stringByEvaluatingJavaScriptFromString 回到javaScript。
2.直接调用方案:
iOS7 中新加入 JavaScriptCore.framework框架,用来处理JavaScript。JavaScriptCore 是苹果 Safari 浏览器的 JavaScript 引擎,JavaScriptCor在 OS X 平台上很早就存在的,而在 iOS 平台,直到iOS7才对外开放,并提供了 Objective-C 的接口。
了解以下几个类:
JSContext:An instance of JSContext represents a JavaScript execution environment.(一个 Context 就是一个 JavaScript 代码执行的环境,也叫作用域。)
JSValue:Conversion between Objective-C and JavaScript types.(JS是弱类型的,ObjectiveC是强类型的,JSValue被引入处理这种类型差异,在 Objective-C 对象和 JavaScript 对象之间起转换作用)
可以通过两种方式在 JavaScript 中调用 Objective-C
■ Blocks :JS functions (对应 JS 函数)
■ JSExport protocol :JS objects (对应 JS 对象)
这里我们只介绍第一种方式。
说到这里,其实在JavaScriptCore.framework框架内,直接可以通过[context evaluateScript:testScript];完成Objective-C对javaScript的调用。
网友评论