WKWebView与H5页面的交互

1.WKWebView的创建代码  遵循3个协议

 WKWebViewConfiguration * testConfig = [[WKWebViewConfiguration alloc] init];

        // 为WKWebViewConfiguration设置偏好设置

        WKPreferences*testPreferences = [[WKPreferences alloc]init];

        testConfig.preferences= testPreferences;

        // 允许native和js交互

        testPreferences.javaScriptEnabled=YES;

        WKUserContentController * testUserContentController = [[WKUserContentController alloc] init];

        // 注册H5页面调用的方法写了下面两个例子,按照自己需求  // 需要遵循WKScriptMessageHandler协议

        [testUserContentController addScriptMessageHandler:self name:@"popToMainViewController"];

        [testUserContentController addScriptMessageHandler:self name:@"hideBar"];

        testConfig.userContentController= testUserContentController;

        WKWebView * testWebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height) configuration:testConfig];

        NSString * path = @"http://www.baidu.com";

        NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:path]];

        [testWebView loadRequest:request];

2.实现代理方法  // 注意:::::::需要调用JS方法的时候必须在(void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation这个方法里面写,要不然网页没加载完,调啥方法都是找不到

#pragma mark---WKnavigationDelegate

- (void)webView:(WKWebView*)webView didStartProvisionalNavigation:(WKNavigation*)navigation {

    NSLog(@"webViewDidStartLoad");

}

- (void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation {

    NSLog(@"webViewDidFinishLoad");

    // 调用js方法

//    NSString *jsFun = [NSString stringWithFormat:@"pageFin('%@')",@"1234567"];

//    [self.webView evaluateJavaScript:jsFun completionHandler:^(id _Nullable result, NSError * _Nullable error){

//        NSLog(@"evaluateJavaScript:\n result = %@ error = %@",result, error);

//    }];


}

#pragma mark---WKScriptMessageHandler代理方法

// 接受js发送的消息 注意:::::::js调用iOS注册的方法时,必须传值,随便传点什么都可以,不传值这个方法不会被调用,暂时没搞清楚是啥问题

-(void)userContentController:(WKUserContentController*)userContentController didReceiveScriptMessage:(WKScriptMessage*)message

{

    NSLog(@"%@,%@",message.name,message.body);

    NSString*name = message.name;

    if ([name isEqualToString:@"popToMainViewController"]) {

// js 调用popToMainViewController这个方法的时候,你在这里处理

    }elseif([nameisEqualToString:@"hideBar"]){

// js 调用hideBar这个方法的时候,你在这里处理

    }else{

    }

}


附上h5调用iOS方法的代码 调用的是popToMainViewController方法

window.webkit.messageHandlers.popToMainViewController.postMessage('1234');

你可能感兴趣的:(WKWebView与H5页面的交互)