iOS原生與JS互調

一、使用 JSContext ,首先獲取當前webview JS上下文java

JSContext *context = [self.webView valueForKeyPath:@"documentView.webView.mainFrame.javaScriptContext"]; 

2.JS調用原生方法 web

 __weak typeof(self) weakSelf = self;
    context[@"nativeTitle"] = ^(NSString *navTitle) {
        LRHLog(@"nativeTitle :%@",navTitle);
        dispatch_async(dispatch_get_main_queue(), ^{
            __strong typeof(weakSelf) strongSelf = weakSelf;
            [strongSelf.webViewController setNaviTitle:navTitle];
            //統計web停留時間
            [strongSelf mobClickWebLoadingTimeWith:navTitle];
        });
    };

block中用來接收js的傳值,「nativeTitle」 爲定義好的方法名async

這裏要注意兩個問題:第1、block中注意jsContext對象的循環引用; 第2、block中是在子線程,所以執行UI操做時,須要回到主線程。lua

3.原生調用JSspa

 [self.webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"jsHandleNativeResult(/%@/)",jsStr]];

「jsHandleNativeResult」 爲定義好的方法名線程

把js須要的參數進行拼接,經過定義好的方法傳給js。 code

相關文章
相關標籤/搜索