JavaScriptCore 的使用

JavaScriptSore是蘋果在iOS7之后提供的一套框架比驻,它讓JS與OC的交互更加簡單方便脸狸。要使用JavaScriptCore首先我們需要引入它的頭文件#import <JavaScriptCore/JavaScriptCore.h>

重要對象:

#import "JSContext.h"
#import "JSValue.h"
#import "JSManagedValue.h"
#import "JSVirtualMachine.h"
#import "JSExport.h"
  • JSContext是JavaScript的運行環(huán)境睛约,他主要作用是執(zhí)行JS代碼和注冊O(shè)C方法接口捞高,相當于HTML中< JavaScript ></JavaScript >之間的內(nèi)容砸琅。
  • JSValue是JSContext的返回結(jié)果迫摔,他對數(shù)據(jù)類型進行了封裝,并且為JS和OC的數(shù)據(jù)類型之間的轉(zhuǎn)換提供了方法汤踏。
  • JSManagedValue是JSValue的封裝织鲸,用它可以解決JS和原生代碼之間循環(huán)引用的問題。
  • JSVirtualMachine 管理JS運行時和管理JS暴露的OC對象的內(nèi)存溪胶。
  • JSExport是一個協(xié)議搂擦,通過實現(xiàn)它可以把一個OC對象暴漏給JS,這樣JS就可以調(diào)用這個對象暴露的方法哗脖。

OC調(diào)用JS代碼

先看下面常見的三種情況瀑踢,之間執(zhí)行js代碼、執(zhí)行文件或網(wǎng)絡(luò)中的js代碼才避、注冊js方法再利用JSValue調(diào)用

//直接執(zhí)行js代碼
- (void)evaluateScript 
{ //定義一個js并執(zhí)行函數(shù) 
JSValue *exeFunction1 = [self.jsContext evaluateScript:@"function hi(){ return 'hi' }; hi()"];
 //執(zhí)行一個閉包js 
JSValue *exeFunction2 = [self.jsContext evaluateScript:@"(function(){ return 'hi' })()"];}
//執(zhí)行一段js文件中的代碼
//更多的應(yīng)用場景使用網(wǎng)絡(luò)或者本地文件加載一段js代碼橱夭,充分利用其靈活性

- (void)evaluateScriptFromJSFile { NSString * path = [[NSBundle mainBundle] pathForResource:@"core" ofType:@"js"]; 
NSString * html = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; 
JSValue *constructor = [self.jsContext evaluateScript:html];
}
//注冊js方法,然后在利用JSValue調(diào)用- (void)regiestJSFunction {
 //注冊一個函數(shù) 
[self.jsContext evaluateScript:@"var hello = function(){ return 'hello' }"]; 
//調(diào)用 
JSValue *value1 = [self.jsContext evaluateScript:@"hello()"];
 //注冊一個匿名函數(shù)
 JSValue *jsFunction = [self.jsContext evaluateScript:@" (function(){ return 'hello objc' })"]; 
//調(diào)用 JSValue *value2 = [jsFunction callWithArguments:nil];}

如果返回的是一個函數(shù)類型桑逝,這可以使用 jsvalue callWithArguments方法進行js函數(shù)調(diào)用徘钥,例如:

//注冊一個匿名函數(shù) 
JSValue *jsFunction = [self.jsContext evaluateScript:@" (function() { return 'hello objc' })"];
 //調(diào)用 JSValue *value2 = [jsFunction callWithArguments:nil];

js調(diào)用native代碼

//注冊js方法給Native調(diào)用- (void)regiestNativeFunction { 
//注冊一個objc方法給js調(diào)用 
self.jsContext[@"log"] = ^(NSString *msg){ NSLog(@"js:msg:%@",msg); };
 //另一種方式,利用currentArguments獲取參數(shù) self.jsContext[@"log"] = ^() { NSArray *args = [JSContext currentArguments]; 
for (id obj in args) 
{ NSLog(@"%@",obj); 
} 
}; 
//使用js調(diào)用objc [self.jsContext evaluateScript:@"log('hello,i am js side')"];
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末肢娘,一起剝皮案震驚了整個濱河市呈础,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橱健,老刑警劉巖而钞,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異拘荡,居然都是意外死亡臼节,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來网缝,“玉大人巨税,你說我怎么就攤上這事》垭” “怎么了草添?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長扼仲。 經(jīng)常有香客問我远寸,道長,這世上最難降的妖魔是什么屠凶? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任驰后,我火速辦了婚禮,結(jié)果婚禮上矗愧,老公的妹妹穿的比我還像新娘灶芝。我一直安慰自己,他們只是感情好唉韭,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布夜涕。 她就那樣靜靜地躺著,像睡著了一般纽哥。 火紅的嫁衣襯著肌膚如雪钠乏。 梳的紋絲不亂的頭發(fā)上栖秕,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天春塌,我揣著相機與錄音,去河邊找鬼簇捍。 笑死只壳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的暑塑。 我是一名探鬼主播吼句,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼事格!你這毒婦竟也來了惕艳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤驹愚,失蹤者是張志新(化名)和其女友劉穎远搪,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逢捺,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡谁鳍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片倘潜。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡绷柒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出涮因,到底是詐尸還是另有隱情废睦,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布蕊退,位于F島的核電站郊楣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏瓤荔。R本人自食惡果不足惜净蚤,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望输硝。 院中可真熱鬧今瀑,春花似錦、人聲如沸点把。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽郎逃。三九已至哥童,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間褒翰,已是汗流浹背贮懈。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留优训,地道東北人朵你。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像揣非,于是被迫代替她去往敵國和親抡医。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 本文由我們團隊的 糾結(jié)倫 童鞋撰寫早敬。 寫在前面 本篇文章是對我一次組內(nèi)分享的整理忌傻,大部分圖片都是直接從keynot...
    知識小集閱讀 15,242評論 11 172
  • 項目中涉及OC與網(wǎng)頁的交互,查找資料時看到了JavaScriptCore.framework搞监,就對照文章ios7 ...
    YaoYaoX閱讀 2,340評論 7 11
  • 注:本文copy自http://www.reibang.com/p/ac534f508fb0水孩,純屬當筆記使用。 概...
    BookKeeping閱讀 731評論 1 3
  • 寫在前面 本篇文章是對我一次組內(nèi)分享的整理腺逛,大部分圖片都是直接從keynote上截圖下來的荷愕,本來有很多炫酷動效的衡怀,...
    等開會閱讀 14,435評論 6 69
  • 8月26-27號,燈塔之家公益工作坊晉城站開展的日子安疗。 8月20號抛杨,得到海老師的支持,可以在晉城增加一堂公益講座荐类,...
    艷麗的故事閱讀 264評論 3 0