UIWebView可以直接利用JavaScriptCore框架和JS交互,包括JS调用本地方法时,同步返回数据给JS。WKWebView不能利用javaScriptCore交互,给JS传值有下面几种思路:
1、JS 调用native方法,native方法中立刻调用JS方法,通过传参的形式将数据给到JS。
2、利用开源框架WebViewJavascriptBridge完成
[self.bridge registerHandler:@"ObjC Echo" handler:^(id data, WVJBResponseCallback responseCallback) {
NSLog(@"ObjC Echo called with: %@", data);
responseCallback(data);
}];
[self.bridge callHandler:@"JS Echo" data:nil responseCallback:^(id responseData) {
NSLog(@"ObjC received response: %@", responseData);
}];
3、在简书上看到另一种思路,通过拦截alert的方式,将数据传递给JS,此方法本人还未尝试,有兴趣的同学可以试一下。《iOS WKWebView与JS交互》
// 交互。可输入的文本。
- (void)webView:(WKWebView *)webView runJavaScriptTextInputPanelWithPrompt:(NSString *)prompt defaultText:(NSString *)defaultText initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(NSString * _Nullable))completionHandler
{
NSLog(@"%@---%@",prompt,defaultText); completionHandler(@"xxxxx");//这里就是要返回给JS的返回值
}