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中
然后添加进去,问题就解决了