~~~~~~~~~更新~~~~~~~
(_webView 是WKWebView,【method】是和H5约定好的字段,参数是H5传过来)
//注册方法
[_webView.configuration.userContentController addScriptMessageHandler:self name:@"method1"];
[_webView.configuration.userContentController addScriptMessageHandler:self name:@"method2"];
//实现方法
- (void)userContentController:(WKUserContentController*)userContentControllerdidReceiveScriptMessage:(WKScriptMessage*)message {
if([message.nameisEqualToString:@"method1"]) {
//不带参数,直接进行操作
}elseif([message.nameisEqualToString:@"method2"]) {
//带参数的,去【message.body】获取参数
}
}
~~~~~~~~~以前的旧办法~~~~~~~
一、
pod 'WebViewJavascriptBridge', '~> 6.0'
二、修改文件,删除UIWebview部分(将压缩包文件取代项目里的同名文件)
链接:代替文件下载地址密码:yt90
三、修改完成后,在webviewVC导入文件名
.h文件复制下面代码:
#import "WebViewJavascriptBridge.h"
@property (strong, nonatomic) WebViewJavascriptBridge *bridge;
.m文件复制下面代码
- (WebViewJavascriptBridge *)bridge {
if(!_bridge) {
_bridge = [WebViewJavascriptBridge bridgeForWebView:_webView];
[_bridge setWebViewDelegate:self];
}
return _bridge;
}
在viewdidload里面调用交互方法,
1、H5界面获取app传过去的值:
[self.bridge callHandler:@"方法名,两端统一" data:@"app向H5传的值,类型自定" responseCallback:^(id responseData) {
NSLog(@"ObjC received response: %@", responseData);
}];
2、app获取H5回调的值:
[self.bridge registerHandler:@"方法名,两端统一" handler:^(iddata,WVJBResponseCallbackresponseCallback) {
responseCallback(data);
}];
网友评论