在使用WKWebView 时,如果JS调用原生失败,只可能有3个原因:
1,没有注册方法
2,没有给WKWebViewConfiguration设置WKPreferences,这是最容易被忽略的
3,没有给WKWebViewConfiguration设置WKUserContentController,这也是最容易被忽略的
正确代码:JS调原生
WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init];
configuration.userContentController = [WKUserContentController new];
[configuration.userContentController addScriptMessageHandler:self name:@"JSCallOC"];
WKPreferences *preferences = [WKPreferences new];
preferences.javaScriptCanOpenWindowsAutomatically = YES;
configuration.preferences = preferences;
QBWKWebView *webView = [[QBWKWebView alloc] initWithFrame:webFrame configuration:configuration];
webView.QBNavigationDelegate = self;
[self.view addSubview:webView];
正确代码:原生调JS
/* 带参数*/
NSString *JS = [NSString stringWithFormat:@"OCCallJS('%@')",@"参数"];
[self.webView evaluateJavaScript:JS completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@----%@",result, error);
}];
/* 对应的h5端*/
function setLocation(param) {}
/* 不带参数*/
NSString *JS = @"OCCallJS";
[self.webView evaluateJavaScript:JS completionHandler:^(id _Nullable result, NSError * _Nullable error) {
NSLog(@"%@----%@",result, error);
}];
/* 对应的h5端*/