1、webview的h5页面调用原生方法
1)、添加方法监听
监听goBack方法如下:
[configuration.userContentController addScriptMessageHandler:self name:@"goBack"];
2)、实现代理回调,响应方法
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
NSString *functionName = message.name;
if ([functionName isEqualToString:@"goBack"]) {
//message.body为参数
}
}
方法为挂在window下。iOS不能直接返回给js返回值。需要再次调用js方法来进行值返回。
2、原生调用js方法
NSString *jsString = [NSString stringWithFormat:@"setInfo('%@')", info];
[self.webView evaluateJavaScript:jsString completionHandler:^(id _Nullable data, NSError * _Nullable error) {
NSLog(@"js返回data=%@:error=%@", data ,[error localizedDescription]);
}];
3、js调用iOS原生方法,js代码
代码如下:
fromJS为方法名
Some data为参数
window.webkit.messageHandlers.fromJS.postMessage('Some data');
也可以传递json参数
var data = { key1: 'value1', key2: 42, array: [1, 'two', true] };
window.webkit.messageHandlers.fromJS.postMessage(data);
4、js定义给iOS原生调用的方法
参考代码如下:
receiveFromNative为定义的方法名。
window.receiveFromNative = function(result) {
console.log('Received from Native:', result);
// 对接收到的结果进行处理
};