一、创建
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
//设置偏好设置
config.preferences = [[WKPreferencesalloc] init];
//默认为0
config.preferences.minimumFontSize= 10;
//默认认为YES
config.preferences.javaScriptEnabled= YES;
//在iOS上默认为NO,表示不能自动通过窗口打开
config.preferences.javaScriptCanOpenWindowsAutomatically= YES;
//打开网页间的滑动返回
self.web.allowsBackForwardNavigationGestures=YES;
self.web=[[WKWebViewalloc]initWithFrame:CGRectMake(0, 60, WIDTH, HEIGHT-100) configuration:config];
二、WKNavigationDelegate代理
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation;
//当内容开始返回时调用
- (void)webView:(WKWebView *)webView didCommitNavigation:(WKNavigation *)navigation;
//页面加载完成之后调用
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation;
//页面加载失败时调用
- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation;
页面跳转的代理分三种:
- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation;
//在收到响应后,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler;
//在发送请求之前,决定是否跳转
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler;
WKUIDelegate代理
* web界面中有弹出警告框时调用
* @param webView实现该代理的webview
* @param message警告框中的内容
* @param frame主窗口
* @param completionHandler警告框消失调用
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(void (^)())completionHandler;
通过message获取到JS发送过来的消息,一定要完成completionHandler()回调,不然一直在崩溃
OC向JS传值、调用JS方法
[self.web evaluateJavaScript:[NSString stringWithFormat:@"resultData('%@')",jsonstr]completionHandler:nil];
通过evaluateJavaScript方法,向JS注册方法名以及传值(传值格式必须是JS的格式)
JS向OC传值、调用JS方法
在初始化WKWebView时,通过configuration.userContentController的addScriptMessageHandler方法,传入方法名(需要跟JS约定好同一个名字),方便调用。
[self.web.configuration.userContentControlleraddScriptMessageHandler:self name:@"closeMe"];
在WKScriptMessageHandler代理中根据之前约定好的方法名获取参数
- (void)userContentController:(WKUserConåtentController*)userContentController
didReceiveScriptMessage:(WKScriptMessage*)message {};
message.name与message.boby