美文网首页
WKWebView与H5页面的交互

WKWebView与H5页面的交互

作者: 爱的就是娜 | 来源:发表于2021-08-18 16:32 被阅读0次

    1.WKWebView的创建代码  遵循3个协议<WKUIDelegate,WKNavigationDelegate,WKScriptMessageHandler>

     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页面的交互

          本文链接:https://www.haomeiwen.com/subject/kqbgbltx.html