WKWebView使用以及JS交互

一、创建

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

你可能感兴趣的:(WKWebView使用以及JS交互)