美文网首页
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