美文网首页iOS网络篇程序员iOS技能
Objective-C 语言和JavaScript语言的相互调用

Objective-C 语言和JavaScript语言的相互调用

作者: 曲年 | 来源:发表于2015-06-17 13:41 被阅读1865次

     一.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的调用。

    相关文章

      网友评论

      • 程序狗:keypath里面的文字代表什么意思
      • 02628f8e8c5b:不知道为什么用evaluateScript:的时候js页面会出问题,而用stringByEvaluatingJavaScriptFromString没事,出问题的是5s,8.0版本,而6,9.0以上错误概率小

      本文标题:Objective-C 语言和JavaScript语言的相互调用

      本文链接:https://www.haomeiwen.com/subject/lxmdqttx.html