WK的代码请参照
https://www.cnblogs.com/someonelikeyou/p/6890587.html
现在说遇到的两个问题:
一 JS调用WK
1:约定的方法名为 AppGoBack() 为网页返回原生控制器。
2:JS代码
window.webkit.messageHandlers.AppGoBack.postMessage()
3 WK代码
[userContentController addScriptMessageHandler:delegateController name:@"AppGoBack"];
4 协议监听方法
#pragma mark - WKScriptMessageHandler
- (void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message{
NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo);
//返回
if([message.nameisEqualToString:@"AppGoBack"]) {
[self.navigationController popViewControllerAnimated:YES];
}
}
按照往上的其他资料这样写是没问题的,但是死活都没法监听到,其实是 JS方面存在着问题:
window.webkit.messageHandlers.AppGoBack.postMessage()
这个方法必须要传参数才能被WK 解析到,改成
window.webkit.messageHandlers.AppGoBack.postMessage({
'method': 'AppGoBack' }
)
类似这样带参的就OK了。
二:WK调用JS
1 在需要调用的地方写上
[webView evaluateJavaScript: method completionHandler:^(id_Nullableresult,NSError*_Nullableerror) { NSLog(@"==%@----%@",result, error);
}];
其中 method为JS 方法,需要注意的是当传中文是参数的写法,
不能直接传中文,要加上 ' ' 引号才行,不然JS没法接收 想这样传值
NSString *cityStr = [NSString stringWithFormat:@"AppToWapAddAddressCookie('%@')",self.cString];
[webView evaluateJavaScript:cityStr completionHandler:^(id_Nullable result,NSError*_Nullable error) { NSLog(@"==%@----%@",result, error);
}];