首页
学习
活动
专区
圈层
工具
发布

全面解析 JavaScriptCore 相关特性

在 iOS 开发中,JavaScriptCore 框架支持 JS 与 OC 直接互相调用,从而实现动态化方案。...类对象 jsContext jsContext 调用evaluateScript: 方法执行了两条 js 语句,并得到执行结果 result,是一个 JSValue 类对象 result调用 toInt32...在 iOS 开发中,可以通过创建一个 JSContext 去调用 JS 脚本,访问一些JS定义的值和函数,同时也提供了让 JS 访问 Native 对象、方法的接口。...JSValue 类: JS 侧的代码执行结果都可以从 JSContext 中获取然后赋值给 JSValue对象,JSValue 是保证 JS 端和 Native 的方法能互相调用的桥梁。...10]]; NSLog(@"%d", subtractResult.toInt32); // 10 } OC 代码中加载并执行了 ocEvaluateScript.js,然后调用了 subtractFunc

1.5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    当JavaScriptCore遇上多线程

    JSContext与JSVirtualMachine JSContext是native代码执行JS代码的上下文,native可以向JSContext中注入方法和属性以供JS调用,相当于在JS的window...执行JS代码时会加锁,该执行过程中其他线程如果想用同一VM的context执行JS代码则需要等待,所以如果是属于同一VM的不同JSContext完全没必要放在不同的线程执行,最后都会变成串行,甚至增加了线程切换的开销...代码,这段JS代码又会调用native提供的log接口,而log接口又会同步切换到主线程执行NSLog。...[loj7az9syt.png] 这个构造函数不能更简单了,首先创建一个新的VM,然后调用另一个带VM参数的构造函数。...Anyway,通过这个bug我们以后在处理JSCore的多线程问题的时候,一定要注意,尽量让JSContext创建和执行JS代码都在同一个线程,不然一不小心就会犯下和笔者一样的错误了。

    3.5K51

    iOS引入JavaScriptCore引擎框架(一)

    上下文中,js在何时的时机调用函数。...我做过一个测试:首先在UIWebView的webViewDidStartLoad阶段创建JSContext并暴露oc端的方法,在加载一级页面时js正常调用oc的方法,而跳转到二级页面中却无法执行oc的方法...其次,在webVIewDidFinishLoad阶段创建JSContext并透出oc方法,由于加载js阶段在webVIewDidFinishLoad阶段之前,因此一级页面js无法调用oc方法,但是二级页面同理也是如此...,但是由于js代码是在iOS的UI线程执行,因此为了让js可以调用oc方法,可以通过在js设置setTimeout来让任务放到执行队列的末端,先执行oc层的webVIewDidFinishLoad方法,...待任务完成后再执行js中的异步代码,通过这种方式可以完成js调用oc方法;反过来,oc层调用js函数没有任何问题,因为在webVIewDidFinishLoad阶段js代码已执行完毕(除了异步代码)。

    1.8K60

    让你的iOS应用程序支持运行JavaScript脚本:JavaScriptCore框架详解

    4.JSExport     JSExport是一个协议,Native中遵守此解析的类可以将方法和属性转换为JS的接口供JS调用。...刚才我们只是简单了通过原生调用了一段JS代码,但是如果Native在调JS方法时无法传参那也太low了,我们可以直接将要传递的参数格式化到字符串中,修改main.js文件如下: function put...三、在JavaScript中调用Native方法     有来无往非君子,同样也可以在原生中编写方法让JS来调用,示例如下: - (void)viewDidLoad { [super viewDidLoad...运行环境中的一些信息: //当前的JS运行环境 当JS调用OC方法时,在OC方法中可以用此方法获取到JS运行环境 + (JSContext *)currentContext; //获取当前执行的JS函数...在Objective-C中调用JS脚本或者JS调用OC方法都可以使用JSValue来传输数据。

    5.9K30

    能让 JS 执行的 JavascriptCore ,到底是啥

    接下来,我们来看看 IOS 代码与 JS 代码之间是如何调用的。...在 IOS 中调用 JS 代码 在 IOS 中要调用 JS,首先要在 swift 文件顶部引入 JavaScriptCore 包: import JavaScriptCore 接着,你可以在 Swift...代码中创建一个 JSContext 对象,使用这个对象的 evaluateScript 方法,可以执行一段 JS 代码: let context = JSContext() JSValue *value...var q = MyPoint.makePointWithXY(, ); 在实际开发中,JS 与 IOS 工程师需要确定好调用的方法名称(假设为 jsToOc);其次,ISO 工程师需要在 JSContext...此时,OCJSBridge.jsToOc 便是在 JS 需要调用到的。一旦在 JS 调用了,IOS 中的 jsToOc 方法就会响应 JS 的调用请求,并解析随方法携带过来的参数。

    1.8K20
    领券