OC與JS交互的簡單實現(xiàn)方式

? H5的快速發(fā)展,使得現(xiàn)在各種APP中或多或少的嵌入了H5的頁面,那么原生頁面和H5的混合開發(fā)成了我們不得不熟悉的技能.怎么簡單快速的上手這功能,以下介紹幾種方法.

1.WebviewJavaScriptBridge的使用

? WebviewJavaScriptBridge三方的橋接,使得混合開發(fā)變得比較容易,在此詳述一下,使得你能夠快速實現(xiàn)兩種代碼的交互.

1.首先下載WebviewJavaScriptBridge包拉進工程中,并導入頭文件#import"WKWebViewJavascriptBridge.h"

2.在頁面出現(xiàn)的時候加載webView并與之進行橋接(根據(jù)需求不同,此處橋接需要寫在每次進入的時候或者viewDidLoad中).

3.注冊JS能夠調(diào)用的函數(shù)(可根據(jù)需要注冊多個,或者根據(jù)返回值進行自己判斷調(diào)用自己的函數(shù)).

4.在需要的地方調(diào)用JS函數(shù),并傳值給它.

現(xiàn)在根據(jù)每個步驟上代碼

注:(1)此處代碼就是進行橋接以及注冊本地OC函數(shù)

??? (2)此處注冊寫在viewWillAppear中,如果有頁面跳轉(zhuǎn)會出現(xiàn)web頁面重新加載的情況,解決方式一是可放在viewDidLoad中橋接,這樣寫當時在跨應用跳轉(zhuǎn)遇到一次無法跳回的問題,后來問題沒有重現(xiàn),后續(xù)跟進補充,二是比較麻煩的記錄本地操作,再次進入重新操作.

?? (3)register..是本地注冊函數(shù),JS可以調(diào)用'convertValue'函數(shù),data是JS的返回值,可以是任何形式,雙方可自由定義,此處可注冊多個函數(shù)供JS調(diào)用,也可根據(jù)返回值判斷自己該做何種響應.

? ? callHandler函數(shù)是調(diào)用JS函數(shù),data是傳給他們的參數(shù),支持多種格式,response是JS返回的值,可根據(jù)此值做成功與否或者回傳值.

? 到此已經(jīng)基本實現(xiàn)雙方的通信,各種參數(shù)以及函數(shù)定義可雙方商議協(xié)定.

2.webView代理方法中調(diào)用JS代碼

? 同樣,在頁面初始化加載webView,并調(diào)用網(wǎng)絡連接或者本地的html.(同上)

在完成webView加載的時候進行調(diào)用JS代碼(必須在-(void)webViewDidFinishLoad:(UIWebView *)webView中調(diào)用)

此方法可調(diào)用JS函數(shù)并且傳值,在傳遞字符串的時候,將特別多的JSON串進行傳遞的時候出現(xiàn)問題(特殊符號問題).

3.通過系統(tǒng)自帶的JavaScriptCore

?JavaScriptCore framework是iOS7.0后出來的新框架,使用需要注意項目支持系統(tǒng)版本。

JavaScriptCore中類及協(xié)議:

JSContext:給JavaScript提供運行的上下文環(huán)境,JSContext是代表JS的執(zhí)行環(huán)境渔嚷,通過-evaluateScript:方法就可以執(zhí)行一JS代碼

JSValue:JSValue封裝了JS與ObjC中的對應的類型剂习,以及調(diào)用JS的API等岭洲,可以理解為JavaScript和Objective-C數(shù)據(jù)和方法的橋梁

JSManagedValue:管理數(shù)據(jù)和方法的類

JSVirtualMachine:處理線程相關

JSExport:JSExport是一個協(xié)議扮超,遵守此協(xié)議扒腕,就可以定義我們自己的協(xié)議擂达,在協(xié)議中聲明的API都會在JS中暴露出來活玲,才能調(diào)用

下邊看直接調(diào)用JS代碼,可以在本地拉進.js文件進行操作

以上代碼中都有注釋,便不再詳細介紹,每種方法都能實現(xiàn)各種功能,只是進行簡單介紹,部分詳細介紹異界JS代碼后續(xù)跟進.共同進步,共同探索.


最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谍婉,隨后出現(xiàn)的幾起案子舒憾,更是在濱河造成了極大的恐慌,老刑警劉巖穗熬,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镀迂,死亡現(xiàn)場離奇詭異,居然都是意外死亡唤蔗,警方通過查閱死者的電腦和手機探遵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妓柜,“玉大人箱季,你說我怎么就攤上這事」髌” “怎么了藏雏?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長作煌。 經(jīng)常有香客問我掘殴,道長赚瘦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任奏寨,我火速辦了婚禮起意,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘病瞳。我一直安慰自己揽咕,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布套菜。 她就那樣靜靜地躺著心褐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笼踩。 梳的紋絲不亂的頭發(fā)上逗爹,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音嚎于,去河邊找鬼掘而。 笑死,一個胖子當著我的面吹牛于购,可吹牛的內(nèi)容都是我干的袍睡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肋僧,長吁一口氣:“原來是場噩夢啊……” “哼斑胜!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫌吠,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤止潘,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辫诅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凭戴,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡串稀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年锭汛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴垦。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肤视,死狀恐怖档痪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情邢滑,我是刑警寧澤腐螟,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響遭垛,放射性物質(zhì)發(fā)生泄漏尼桶。R本人自食惡果不足惜操灿,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一锯仪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧趾盐,春花似錦庶喜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至本缠,卻和暖如春斥扛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丹锹。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工稀颁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楣黍。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓匾灶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親租漂。 傳聞我的和親對象是個殘疾皇子阶女,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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