IOS JavaScriptCore介绍

本文主要转自:https://www.jianshu.com/p/cdaf9bc3d65d

http://blog.csdn.net/u011993697/article/details/51577295

oc与JS的交互实现方式有很多,在ios7之前用的比较多的是WebViewJavaScriptBridge,在ios7之后苹果将JavaScriptCore框架开放,这样就增加一种选择。

1、准备工作

首先要导入JavaScriptCore的头文件

#import <JavaScriptCore/JavaScriptCore.h>

2、用webview加载HTML文件,这里用的是本地html

- (void)viewDidLoad
{
[super viewDidLoad];

NSString *path = [[[NSBundle mainBundle] bundlePath]  stringByAppendingPathComponent:@"JSCallOC.html"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]];
[self.webView loadRequest:request];
}

3、在进行JS交互之前,需要通过JSContent创建一个使用JS的环境

- (void)webViewDidFinishLoad:(UIWebView *)webView
{
    // Undocumented access to UIWebView‘s JSContext
    self.context = [webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"];

    // 打印异常
    self.context.exceptionHandler =
    ^(JSContext *context, JSValue *exceptionValue)
    {
        context.exception = exceptionValue;
        NSLog(@"%@", exceptionValue);
    };

}

4、JS调用OC代码

4.1、通过block调用

<input type="button" value="测试log" onclick="log(‘测试‘);" />
self.context[@"log"] = ^(NSString *str)
{
NSLog(@"%@", str);
};

4.2、实现JSExport协议

定义需要暴露给JS的内容

<input type="button" value="计算阶乘" onclick="native.calculateForJS(input.value);" />
@protocol TestJSExport <JSExport>

JSExportAs
(calculateForJS ,
 - (void)handleFactorialCalculateWithNumber:(NSNumber *)number
 );

@end
 // 以 JSExport 协议关联 native 的方法
self.content[@"native"] = self;

5、OC调用JS代码

在OC中,所有表示JS中对象,都用JSValue来创建,通过objectForKeyedSubscript方法或者直接使用下标的方法获取JS对象,然后使用callWithArguments方法来执行函数。

// 方法一.
 JSValue *function = [self.context objectForKeyedSubscript:@"factorial"];
// 方法二.
JSValue * function = self.context[@"factorial"];

JSValue *result = [function callWithArguments:@[inputNumber]];
self.showLable.text = [NSString stringWithFormat:@"%@", [result toNumber]];

一个demon连接:https://github.com/shaojiankui/JavaScriptCore-Demo

6、封装

将javascriptcore进行封装,更方便ios 和 前端进行数据的交互和方法的调用,使用方式和webviewjavascriptbridge一样,先在plist文件配置,对外暴露的oc接口需要实现指定的协议。 
demo:https://github.com/HZQuan/WebViewJavaScriptCoreBridge

原文地址:https://www.cnblogs.com/yongbufangqi1988/p/8461641.html

时间: 2024-10-13 18:53:39

IOS JavaScriptCore介绍的相关文章

iOS框架介绍

iOS框架介绍 Cocoa Touch GameKit  实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息 iOS设备之间蓝牙数据传输   从iOS7开始过期   局域网游戏  http://www.cnblogs.com/KidReborn/archive/2011/10/17/2215641.html iAd     用来在应用中提供广告条 广告条与用户UI视图进行合并,与苹果的iAd服务一起工作,自动处理.加载和呈现富媒体广告以及应答在那些广告条上的点击等所有相关的工作.htt

iOS SDK 介绍及导入

iOS SDK 介绍 环信 SDK 为用户开发 IM 相关的应用提供的一套完善的开发框架.包括以下几个部分: SDK_Core: 为核心的消息同步协议实现,完成与服务器之间的信息交换. SDK: 是基于核心协议实现的完整的 IM 功能,实现了不同类型消息的收发.会话管理.群组.好友.聊天室等功能. EaseUI: 是一组 IM 相关的 UI 控件,旨在帮助开发者快速集成环信 SDK. 用户可以基于我们提供的 Demo 实现自己的应用,也可以基于 SDK 开发自己应用. SDK 采用模块化设计,每

如何评价苹果中国官网 iOS 8 介绍页面的文案「开发者的大事、大快所有人心的大好事」?[转自知乎]

在什么是「苹果式中文」答案中,小七得出了这个结论: 「苹果式中文」是指句子结构破碎,经常缺乏主语,滥用排比,顶真,偏正短语,和不恰当四字词的广告文体. (有关什么是苹果式中文,小七原来贴错地方了TAT,具体分析请移步:什么是「苹果式中文」?) 那么作为广告翻译,苹果做得如何呢? 首先,有个翻译的概念需要向大家普及: 很多知友提出文案有明显的翻译腔,这个说法其实不准够确啊,有关什么是翻译腔,我的分析请移步:什么是「翻译腔」?「翻译腔」是好是坏? 在这里节选原文一段补充说明: 3. 明明能说中文,非

【转】向iOS开发者介绍C++(-)

原文链接 :http://blog.csdn.net/zhiganglet/article/details/24475931 你已经精通了Objective-C,并且一直想学更酷的东西?看看这篇文章吧!本文将向iOS开发者介绍C++.稍后我会介绍,Objective-C能够无缝地使用C和C++代码.因此,基于以下几点原因,iOS开发者理解C++将会很有帮助: 1.有时候你想在应用中使用一个用C++编写的库. 2.你可能用C++写一部分应用程序的代码,以便更容易跨平台移植. 3. 了解其他语言通

一个iOS 框架介绍:MKNetworkKit

http://blog.csdn.net/kmyhy/article/details/12276287 http://blog.csdn.net/mobailwang/article/details/25056959 ASIHTTPRequest (作者:BenCopsey) 是一个使用简单,可用于各种从简单到复杂的 HTTP 请求,或者可用于处理 Amazon S3.Rackspace 等REST 服务的强大框架. 不幸的是,Ben 早在 2011 年 9 月 21 日就已经声明停止开发和支持

iOS:Masonry介绍与使用

Masonry介绍与使用实践:快速上手Autolayout frame----->autoresing------->autoLayout-------->sizeClasses 以上是纯手写代码所经历的关于页面布局的三个时期 在iphone1-iphone3gs时代 window的size固定为(320,480) 我们只需要简单计算一下相对位置就好了 在iphone4-iphone4s时代 苹果推出了retina屏 但是给了码农们非常大的福利:window的size不变 在iphone

iOS Socket介绍及其简单应用

socket,究竟是什么东东,面试时,笔试有他,面试也有他,如果做智能硬件,肯定会用到socket,所以,今天带大家回顾一下socket: 一.介绍:Socket:是应?层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是 一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接?后面:例: 你要打电话给?个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了.等交流结束,挂断电话结束此次交谈. 建立连接步骤:先从服

IOS 蓝牙介绍

蓝牙协议本身经历了从1.0到4.0的升级演变, 最新的4.0以其低功耗著称,所以一般也叫BLE(Bluetoothlow energy). iOS 有两个框架支持蓝牙与外设连接.一个是 ExternalAccessory.从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Accessory需要拿到苹果公司的MFI认证. 另一个框架则是本文要介绍的CoreBluetooth,在iphone4s开始支持,专门用于与BLE设备通讯(因

北京ios开发介绍几个比较好的培训机构

iOS平台确实有着诸多机遇,但也有诸多挑战,除了竞争还有其他风险,所以iOS技术学习至关重要,手游行业让开发者有了更为长远的发展前景和动力,开发者无论是在开发行业深造还是依靠iOS平台转型,都必须具备iOS技能这一前提.更是由于处在iOS的优势平台,游戏产业逐渐从PC转移到移动端,iOS作为移动互联高端平台,对手游的适配自然最符合用户需求. iOS手游的火爆让很多人在iOS开发行业获得机会,但iOS开发本身就属于高技能行业,iOS手游开发更甚,iOS开发学习并不容易,尤其对于零基础人员,对程序员