美文网首页
JavaScriptCore使用

JavaScriptCore使用

作者: 常绿箩 | 来源:发表于2016-08-25 21:00 被阅读134次

一、说明

本篇文章呢主要聊一下JavaScriptCore的使用,为自己做个记录。JavaScriptCore 是苹果 Safari 浏览器的 JavaScript 引擎,JavaScriptCor在 OS X 平台上很早就存在的,而在 iOS 平台,直到IOS7才对外开放,并提供了 Objective-C 的接口。

二、主要类

(一)JSContext:A JSContext object represents a JavaScript execution environment.一个 Context 就是一个 JavaScript 代码执行的环境,也叫作用域。所有的JSValue都是捆绑在一个JSContext上的。

(二)JSExport:The JSExport protocol provides a declarative way to export Objective-C instance classes and their instance methods, class methods, and properties to JavaScript code.可以用这个协议来将原生对象导出给JavaScript,这样原生对象的属性或方法就成为了JavaScript的属性或方法。

(三)JSValue:A JSValue is a reference to a value within the JavaScript object space of a JSVirtualMachine.可以说是JavaScript和Object-C之间互换的桥梁,它提供了多种方法可以方便地把JavaScript数据类型转换成Objective-C,或者是转换过去。对应方式如下表:

(四)JSVirtualMachine:A JSVirtualMachine instance represents a self-contained environment for JavaScript execution.JSVirtualMachine为JavaScript的运行提供了底层资源,管理JS运行时和管理JS暴露的OC对象的内存。

(五)A JSManagedValue object wraps a JSValue object, adding “conditional retain” behavior to provide automatic memory management of values.解决JS和原生代码之间循环引用的问题

三、使用

要使用JavaScriptCore首先我们需要引入它的头文件#import<JavaScriptCore/JavaScriptCore.h>

本篇文章结合此Demo代码主要讲两个方面:

(一)JSCallOC

1、导入头文件#import<JavaScriptCore/JavaScriptCore.h>

2、给控制器添加webView属性和JSContext对象属性;这里是用webView加载的本地网页(of course,别忘了遵守UIWebViewDelegate协议,设置代理)

3、实际界面操作如下图:

上图一整个界面是一个网页,点击网页主要实现以下功能:

1、计算阶乘:在输入框中输入一个数字,然后在OC中计算出结果,最后显示在HTML的页面上;

2、测试log:在后台打印测试数据;

3、OC原生Alert :点击后,弹出OC的提示框;

4、addSubView:添加一个View;

5、push to second ViewController:跳转控制器

那么问题来了,怎么获取点击事件呢,这就需要iOS工程师和后端开发人员进行沟通协定为html中的元素添加一个点击事件方法:

然后以block形式关联JavaScript function,

但是,若以以下形式为元素添加点击方法:那么就要用JSExport协议关联native的方法,要在webView的delegate里面添加如下代码:然后,在.h文件中再声明一个继承JSExport的协议,协议中声明供JS使用的OC的方法:

在.m文件中实现这些方法就OK了。

(二)OCCallJS:

1、同样的别忘了导入头文件

2、点击“js处理”按钮后,将textfild的数据传给js,js计算完成后把结果在返回回来!首先要获取JS里面的计算函数,在OC中,所有表示JS中的对象,都用JSValue来创建,通过objectForKeyedSubscript方法或者直接使用下标的方法获取JS对象,然后使用callWithArguments方法来执行函数:

暂且先记录到此!

相关文章

网友评论

      本文标题:JavaScriptCore使用

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