JavaScriptCore使用

一国夜、說明

本篇文章呢主要聊一下JavaScriptCore的使用焚碌,為自己做個(gè)記錄佛吓。JavaScriptCore 是蘋果 Safari 瀏覽器的 JavaScript 引擎蛇更,JavaScriptCor在 OS X 平臺(tái)上很早就存在的,而在 iOS 平臺(tái)筋讨,直到IOS7才對(duì)外開放埃叭,并提供了 Objective-C 的接口。

二悉罕、主要類

(一)JSContext:A JSContext object represents a JavaScript execution environment.一個(gè) Context 就是一個(gè) JavaScript 代碼執(zhí)行的環(huán)境赤屋,也叫作用域。所有的JSValue都是捆綁在一個(gè)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.可以用這個(gè)協(xié)議來將原生對(duì)象導(dǎo)出給JavaScript类早,這樣原生對(duì)象的屬性或方法就成為了JavaScript的屬性或方法。

(三)JSValue:A JSValue is a reference to a value within the JavaScript object space of a JSVirtualMachine.可以說是JavaScript和Object-C之間互換的橋梁嗜逻,它提供了多種方法可以方便地把JavaScript數(shù)據(jù)類型轉(zhuǎn)換成Objective-C,或者是轉(zhuǎn)換過去涩僻。對(duì)應(yīng)方式如下表:

(四)JSVirtualMachine:A JSVirtualMachine instance represents a self-contained environment for JavaScript execution.JSVirtualMachine為JavaScript的運(yùn)行提供了底層資源,管理JS運(yùn)行時(shí)和管理JS暴露的OC對(duì)象的內(nèi)存。

(五)A JSManagedValue object wraps a JSValue object, adding “conditional retain” behavior to provide automatic memory management of values.解決JS和原生代碼之間循環(huán)引用的問題

三逆日、使用

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

本篇文章結(jié)合此Demo代碼主要講兩個(gè)方面:

(一)JSCallOC

1嵌巷、導(dǎo)入頭文件#import<JavaScriptCore/JavaScriptCore.h>

2、給控制器添加webView屬性和JSContext對(duì)象屬性室抽;這里是用webView加載的本地網(wǎng)頁(of course,別忘了遵守UIWebViewDelegate協(xié)議搪哪,設(shè)置代理)

3、實(shí)際界面操作如下圖:

上圖一整個(gè)界面是一個(gè)網(wǎng)頁狠半,點(diǎn)擊網(wǎng)頁主要實(shí)現(xiàn)以下功能:

1噩死、計(jì)算階乘:在輸入框中輸入一個(gè)數(shù)字,然后在OC中計(jì)算出結(jié)果神年,最后顯示在HTML的頁面上已维;

2、測試log:在后臺(tái)打印測試數(shù)據(jù)已日;

3垛耳、OC原生Alert :點(diǎn)擊后,彈出OC的提示框飘千;

4堂鲜、addSubView:添加一個(gè)View;

5护奈、push to second ViewController:跳轉(zhuǎn)控制器

那么問題來了缔莲,怎么獲取點(diǎn)擊事件呢,這就需要iOS工程師和后端開發(fā)人員進(jìn)行溝通協(xié)定為html中的元素添加一個(gè)點(diǎn)擊事件方法:

然后以block形式關(guān)聯(lián)JavaScript function霉旗,

但是痴奏,若以以下形式為元素添加點(diǎn)擊方法:那么就要用JSExport協(xié)議關(guān)聯(lián)native的方法,要在webView的delegate里面添加如下代碼:然后,在.h文件中再聲明一個(gè)繼承JSExport的協(xié)議,協(xié)議中聲明供JS使用的OC的方法:

在.m文件中實(shí)現(xiàn)這些方法就OK了厌秒。

(二)OCCallJS:

1读拆、同樣的別忘了導(dǎo)入頭文件

2、點(diǎn)擊“js處理”按鈕后鸵闪,將textfild的數(shù)據(jù)傳給js檐晕,js計(jì)算完成后把結(jié)果在返回回來!首先要獲取JS里面的計(jì)算函數(shù)蚌讼,在OC中辟灰,所有表示JS中的對(duì)象,都用JSValue來創(chuàng)建篡石,通過objectForKeyedSubscript方法或者直接使用下標(biāo)的方法獲取JS對(duì)象芥喇,然后使用callWithArguments方法來執(zhí)行函數(shù):

暫且先記錄到此!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末夏志,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沟蔑,老刑警劉巖湿诊,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘦材,居然都是意外死亡厅须,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門食棕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朗和,“玉大人,你說我怎么就攤上這事簿晓】衾” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵憔儿,是天一觀的道長忆植。 經(jīng)常有香客問我,道長谒臼,這世上最難降的妖魔是什么朝刊? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮蜈缤,結(jié)果婚禮上拾氓,老公的妹妹穿的比我還像新娘。我一直安慰自己底哥,他們只是感情好咙鞍,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叠艳,像睡著了一般奶陈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上附较,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天吃粒,我揣著相機(jī)與錄音,去河邊找鬼拒课。 笑死徐勃,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的早像。 我是一名探鬼主播僻肖,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼卢鹦!你這毒婦竟也來了臀脏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揉稚,沒想到半個(gè)月后秒啦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡搀玖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年余境,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灌诅。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡芳来,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猜拾,到底是詐尸還是另有隱情即舌,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布关带,位于F島的核電站侥涵,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏宋雏。R本人自食惡果不足惜芜飘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磨总。 院中可真熱鬧嗦明,春花似錦、人聲如沸蚪燕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馆纳。三九已至诗良,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鲁驶,已是汗流浹背鉴裹。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留钥弯,地道東北人径荔。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像脆霎,于是被迫代替她去往敵國和親总处。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

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

  • 本文由我們團(tuán)隊(duì)的 糾結(jié)倫 童鞋撰寫睛蛛。 寫在前面 本篇文章是對(duì)我一次組內(nèi)分享的整理鹦马,大部分圖片都是直接從keynot...
    知識(shí)小集閱讀 15,229評(píng)論 11 172
  • 注:本文copy自http://www.reibang.com/p/ac534f508fb0胧谈,純屬當(dāng)筆記使用。 概...
    BookKeeping閱讀 730評(píng)論 1 3
  • 寫在前面 本篇文章是對(duì)我一次組內(nèi)分享的整理荸频,大部分圖片都是直接從keynote上截圖下來的第岖,本來有很多炫酷動(dòng)效的,...
    等開會(huì)閱讀 14,402評(píng)論 6 69
  • 項(xiàng)目中涉及OC與網(wǎng)頁的交互试溯,查找資料時(shí)看到了JavaScriptCore.framework,就對(duì)照文章ios7 ...
    YaoYaoX閱讀 2,332評(píng)論 7 11
  • JavaScriptCore JavaScriptCore是webkit的一個(gè)重要組成部分郊酒,主要是對(duì)JS進(jìn)行解析和...
    JamesYu閱讀 55,974評(píng)論 22 199