美文网首页
WKWebView js方法的使用

WKWebView js方法的使用

作者: Mirsiter_魏 | 来源:发表于2020-11-20 10:46 被阅读0次

    一、h5 调用 OC,给OC传值

       1、在WKWebview初始化的时候,先注册JS方法

           //这个类主要用来做native与JavaScript的交互管理

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

            //注册一个name为jsToOcNoPrams的js方法,设置处理接收JS方法的代理

            [wkUController addScriptMessageHandler:self  name:@"jsToOcNoPrams"];

           [wkUController addScriptMessageHandler:self name:@"jsToOcWithPrams"];

            config.userContentController = wkUController;

    2、拦截js方法,接收参数

    注意:遵守WKScriptMessageHandler协议,代理是由WKUserContentControl设置

      //通过接收JS传出消息的name进行捕捉的回调方法

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

        NSLog(@"name:%@\\\\n body:%@\\\\n frameInfo:%@\\\\n",message.name,message.body,message.frameInfo);

        //用message.body获得JS传出的参数体

        NSDictionary * parameter = message.body;

        //JS调用OC

        if([message.name isEqualToString:@"jsToOcNoPrams"]){

            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:@"不带参数" preferredStyle:UIAlertControllerStyleAlert];

            [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            }])];

            [self presentViewController:alertController animated:YES completion:nil];

        }else if([message.name isEqualToString:@"jsToOcWithPrams"]){

            UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"js调用到了oc" message:parameter[@"params"] preferredStyle:UIAlertControllerStyleAlert];

            [alertController addAction:([UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

            }])];

            [self presentViewController:alertController animated:YES completion:nil];

        }

    }

    3、在webview释放注销之前移除js方法

          //移除注册的js方法

            [[_webView configuration].userContentController removeScriptMessageHandlerForName:@"jsToOcNoPrams"];

    二、oc调用H5,给H5传值

    1、//OC调用JS changeColor()是JS方法名,completionHandler是异步回调block

        NSString *jsString = [NSString stringWithFormat:@"changeColor('%@')", @"Js参数"];

        [_webView evaluateJavaScript:jsString completionHandler:^(id _Nullable data, NSError * _Nullable error) {

            NSLog(@"改变HTML的背景色");

        }];

    //改变字体大小 调用原生JS方法

        NSString *jsFont = [NSString stringWithFormat:@"document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '%d%%'", arc4random()%99 + 100];

        [_webView evaluateJavaScript:jsFont completionHandler:nil];

    2、// 页面加载完成之后调用

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

        [SVProgressHUDdismiss];

    NSString* jsStr = [NSStringstringWithFormat:@"payResult('%@')",@"true"];

    [self.webView evaluateJavaScript:jsStrcompletionHandler:^(id_Nullable result,NSError* _Nullable error) {

    NSLog(@"==%@----%@",result, error);

        }];

    }

    相关文章

      网友评论

          本文标题:WKWebView js方法的使用

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