1. 程式人生 > >ios開發app與js互動第三方工具WebViewJavascriptBridge的使用以及問題pod出現的問題處理

ios開發app與js互動第三方工具WebViewJavascriptBridge的使用以及問題pod出現的問題處理

WebViewJavascriptBridge是一個ios與安卓通用的與js互動工具。使用起來非常方便,現在WebViewJavascriptBridge支援webview與WKWebView

首先要在.h或者.m裡面宣告

#import "WKWebViewJavascriptBridge.h"//使用wkweview的宣告這個類
//#import "WebViewJavascriptBridge.h"//使用webview的宣告這個類
#import <WebKit/WebKit.h>

@property WKWebViewJavascriptBridge* bridge;//型別根據前面宣告的類來決定

然後在.m中來關聯處理

//開啟日誌
[WKWebViewJavascriptBridge enableLogging];
//關聯webview
self.bridge = [WKWebViewJavascriptBridge bridgeForWebView:webView];
//設定代理,如果用不到可以不用宣告
[self.bridge setWebViewDelegate:self];

下面就是js與oc互調的方法

//js呼叫oc
    [self.bridge registerHandler:@"getMerchantNo" handler:^(id data, WVJBResponseCallback responseCallback) {
        DLog(@"js返回的資料 %@", data);
        if (responseCallback) {
            // 反饋給JS
            responseCallback(@{@"userId": @"123456"});
        }
    }];

    // oc呼叫js
    [self.bridge callHandler:@"assureOpenResult" data:nil responseCallback:^(id responseData) {
        NSLog(@"oc收到js返回的資料: %@", responseData);
    }];

到這裡js與oc互調的方法就結束了。

下面來說一下在除錯過程中遇到的一個比較坑的問題

在pod工具之後,遠行時程式碼正常,但是在呼叫的時候報錯 ,報錯資訊如下

Undefined symbols for architecture arm64:

  "_OBJC_CLASS_$_WKWebViewJavascriptBridge", referenced from:

      objc-class-ref in HKAddServiceVC.o

ld: symbol(s) not found for architecture arm64

clang: error: linker command failed with exit code 1 (use -v to see invocation)

然後在網上找了一大推的方法,其中有人時這樣解決的,但是對我專案沒用

解決:
Phew, finally got it working by editing the bridge header.

In file WKWebViewJavascriptBridge.h, find these lines:

#if (__MAC_OS_X_VERSION_MAX_ALLOWED > __MAC_10_9 || __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1)
#define supportsWKWebKit
#endif
 

Then remove the #if #endif pair, just leave the #define supportsWKWebKit bit out. But make sure you are using iphone 7.1 or above or it won't support WKWebkit.

然後發現找到的原因時在pod專案之後.a檔案居然沒用引用到app中

然後新增進去,問題就解決了