? 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ù)跟進.共同進步,共同探索.