iOS JS 交互之利用系統JSContext實現 JS調用OC方法以及Objective-C調用JavaScript方法

 ios js 交互分爲兩塊:

1.oc調用js 

這一塊實現起來比較簡單,css

個人項目中加載的是本地的html,js,css,須要注意的是當你向工程中拖入這些文件時,選擇拷貝到工程中,(拖入的文件夾是藍色的,相對路徑),否則css,js 的路徑會存在問題html

 

加載本地html:ios

 

oc調用js:一句代碼搞定web

 

 

2.js 調用oc

  js調用oc又分爲兩種:

 1.js端是直接調用方法

這裏就要說到ios7才推出的一個新的api    JavaScriptCore,首先咱們引入這個類,並初始化一個JSContext對象api

 

在webViewDidFinishLoad方法裏服務器

此處經過當前webView的鍵獲取到jscontext框架

 

將咱們的context對象與js方法創建橋接聯繫,post

 

2.js端經過對象調用方法

說到對象調方法咱們首先確定得有個對象,因此咱們首先須要建立一個js交互類,並聲明和實現相應的交互方法,在這裏須要注意的是咱們須要在這個自定義交互類裏面導入JavaScriptCore框架,聲明一個聽從於JSExport協議的協議(有點繞,看圖),在這個協議裏聲明咱們的交互方法,最後讓咱們的交互類聽從與咱們自定義的協議lua

 

在交互類的.m中實現相應的js交互方法,並實現咱們想要的操做url

注意到圖上的

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)

     {

 

     }];

 ------分割線-----

若是項目中使用wkWebview, 那麼不支持使用jsContext來進行js交互攔截js方法,不過能夠使用一下方法:

 

#pragma -mark WKWebview的配置項

- (WKWebView *)wbview

{

    if (!_wbview) {

        config = [[WKWebViewConfiguration alloc]init];

        //註冊js方法

        config.userContentController = [[WKUserContentController alloc]init];

        //webViewAppShare這個需保持跟服務器端的一致,服務器端經過這個name發消息,客戶端這邊回調接收消息,從而作相關的處理

        [config.userContentController addScriptMessageHandler:self name:@"webViewAppShare"];

        

        _wbview = [[WKWebView alloc]initWithFrame:WbviewFrame configuration: config];

        _wbview.navigationDelegate = self;

        _wbview.UIDelegate = self;

        

        [self.view addSubview:_wbview];

    }

    

    return _wbview;

}

 

//js交互方法

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message

{

    NSDictionary *msgBody = [[NSDictionary alloc] initWithDictionary:message.body];

    NSString * shareTitle = text_share;

    NSString * shareText = text_share;

    NSString * shareUrl = url_share;

}

 

 

 

 
 

相關文章
相關標籤/搜索