iOS JS 互動之利用系統JSContext實現 JS調用OC方法以及Objective-C調用JavaScript方法,javascript與oc互動
ios js 互動分為兩塊:1.oc調用js
這一塊實現起來比較簡單,
我的項目中載入的是本地的html,js,css,需要注意的是當你向工程中拖入這些檔案時,選擇拷貝到工程中,(拖入的檔案夾是藍色的,相對路徑),不然css,js 的路徑會存在問題
載入本地html:
oc調用js:一句代碼搞定
2.js 調用oc js調用oc又分為兩種: 1.js端是直接調用方法
這裡就要說到ios7才推出的一個新的api JavaScriptCore,首先我們引入這個類,並初始化一個JSContext對象
在webViewDidFinishLoad方法裡
此處通過當前webView的鍵擷取到jscontext
將我們的context對象與js方法建立橋接聯絡,
2.js端通過對象調用方法
說到對象調方法我們首先肯定得有個對象,所以我們首先需要建立一個js互動類,並聲明和實現相應的互動方法,在這裡需要注意的是我們需要在這個自訂互動類裡面匯入JavaScriptCore架構,聲明一個遵從於JSExport協議的協議(有點繞,看圖),在這個協議裡聲明我們的互動方法,最後讓我們的互動類遵從與我們自訂的協議
在互動類的.m中實現相應的js互動方法,並實現我們想要的操作
注意到圖上的
JSExportAs(invoke, - (void) invoke:(NSString *) method args:(NSString *) args);
這個方法沒有,這個方法的作用是當js端的方法有兩個或兩個以上參數時,我們需要讓- (void) invoke:(NSString *) method args:(NSString *) args;這個方法代替 對應的js這個方法,因為oc端的方法名必須和js端的保持一致,不然就不會調用
最後在我們的webViewDidFinishLoad方法裡初始化我們的互動對象,並讓 context 與之建立聯絡,ok,完事
hybridApi調用此方法 -->
3. Objective-C調用JavaScript方法代碼如下:
[self.webView evaluateJavaScript:[NSString stringWithFormat:@"__YutaAppOnPrepare()"]
completionHandler:^(id response, NSError *error)
{
}];