WKWebView js方法的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WKWebView js方法的使用相关的知识,希望对你有一定的参考价值。

参考技术A 一、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);

    ];

iOS Swift5.0 WKWebView使用JS与Swift交互

参考技术A

1.创建wkwebview

2.ViewController实现两个协议
两个协议分别是:WKNavigationDelegate WKScriptMessageHandler

WKNavigationDelegate:判断页面加载完成,只有在页面加载完成了,才能在swift中调webview中的js方法
WKScriptMessageHandler: 在webview中给swift发消息时要用到协议中的一个方法来接收
3.Swift调用WebView中的JS方法

4.拦截WebView中给Swift发消息

本文参考: https://tomoya92.github.io/2018/07/05/swift-webview-javascript/ ,更多方法交流可以家魏鑫:lixiaowu1129,一起探讨iOS相关技术!

以上是关于WKWebView js方法的使用的主要内容,如果未能解决你的问题,请参考以下文章

WKWebView javascript 警报、提示、确认不起作用

iOS 11.3 的 WKWebView 中的 Service Worker 不可用

WKWebView js方法的使用

iOS Swift5.0 WKWebView使用JS与Swift交互

UIWebView和WKWebView的使用及js交互

ios wkwebview返回原生调用啥方法