美文网首页
WKWebView 与 JS的交互

WKWebView 与 JS的交互

作者: 叫我魏大川 | 来源:发表于2019-05-16 15:28 被阅读0次

    使用WKWebView时与JS的交互问题记录。

    一:JS主动传值给WK

    JS端:
    /* 一个抽象模型 */
    window.webkit.messageHandlers.
    <name>.postMessage(<messageBody>)
    
    /* 具体实例 */
    /*JS的传出语句如下,那么name = "xxxxx"*/
    window.webKit.messagehandlers. xxxxx.postMessage("ooooo")
    
    WK端:
    /*外部要想获得上面的信息则进行如下监听*/
    [self.webView.configuration.userContentController addScriptMessageHandler:self name:@"xxxxx"];
    
    遵循WKScriptMessageHandler,实现
    -(void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message
    {
        if([message.name isEqualToString:@"xxxxx"])
        {
            NSLog(@"收到js调用请求!");
    
            /*获得传出的字符串参数,即"ooooo"*/
            NSLog(@"%@", message.body);
        }
        
    }
    

    这里有一点需要注意,就是传入的参数是_ _NSCFString类型的,需要根据需要转为nsstring,再转换成字典等。

    二:WK主动传值给JS

    NSString * jsStr = [NSString stringWithFormat:@"JS里的方法名('%@')",携带的参数]];
    [self.hView.webView evaluateJavaScript:jsStr completionHandler:^(id _Nullable result, NSError * _Nullable error) {
            if(error)
               NSLog(@" error  %@", error);
            else
                NSLog(@"成功! %@",result);
    }];
    

    三:JS想要随时调取WK,并获取WK方的一些信息,怎么办呢?就是上面两个方法的结合。wk监听到JS调用的方法,然后WK主动调用协商好的方法传进参数即可。

    四:别忘了最后在dealloc里移除监听

    [[self.hView.webView configuration].userContentController removeScriptMessageHandlerForName: @"xxxxx"}
    

    相关文章

      网友评论

          本文标题:WKWebView 与 JS的交互

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