WK的代碼請參照
https://www.cnblogs.com/someonelikeyou/p/6890587.html
現(xiàn)在說遇到的兩個問題:
一 ?JS調(diào)用WK
1:約定的方法名為?AppGoBack() 為網(wǎng)頁返回原生控制器。
2:JS代碼
window.webkit.messageHandlers.AppGoBack.postMessage()
3 WK代碼
[userContentController addScriptMessageHandler:delegateController? name:@"AppGoBack"];
4 協(xié)議監(jiān)聽方法
#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];
? ? }
}
按照往上的其他資料這樣寫是沒問題的,但是死活都沒法監(jiān)聽到,其實是 JS方面存在著問題:
window.webkit.messageHandlers.AppGoBack.postMessage()?
這個方法必須要傳參數(shù)才能被WK 解析到,改成
window.webkit.messageHandlers.AppGoBack.postMessage({
? ? ? ? 'method': 'AppGoBack' ? }
)
類似這樣帶參的就OK了。
二:WK調(diào)用JS ?
1 在需要調(diào)用的地方寫上
[webView evaluateJavaScript: method?completionHandler:^(id_Nullableresult,NSError*_Nullableerror) { ? ? ? ?NSLog(@"==%@----%@",result, error);
? ? }];
其中 method為JS 方法,需要注意的是當傳中文是參數(shù)的寫法,
不能直接傳中文,要加上 ' ' 引號才行,不然JS沒法接收 想這樣傳值
?NSString *cityStr = [NSString stringWithFormat:@"AppToWapAddAddressCookie('%@')",self.cString]; ??
?[webView evaluateJavaScript:cityStr completionHandler:^(id_Nullable result,NSError*_Nullable error) { ? ? ? ?NSLog(@"==%@----%@",result, error);
? ? }];