美文网首页
关于JS与WKWebView交互的两个问题

关于JS与WKWebView交互的两个问题

作者: 茶汤_a1ff | 来源:发表于2018-05-31 11:16 被阅读0次

WK的代码请参照

https://www.cnblogs.com/someonelikeyou/p/6890587.html

现在说遇到的两个问题:

一  JS调用WK

1:约定的方法名为 AppGoBack() 为网页返回原生控制器。

2:JS代码

window.webkit.messageHandlers.AppGoBack.postMessage()

3 WK代码

[userContentController addScriptMessageHandler:delegateController  name:@"AppGoBack"];

4 协议监听方法

#pragma mark - WKScriptMessageHandler

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

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

    //返回

    if([message.nameisEqualToString:@"AppGoBack"]) {

        [self.navigationController popViewControllerAnimated:YES];

    }

}

按照往上的其他资料这样写是没问题的,但是死活都没法监听到,其实是 JS方面存在着问题:

window.webkit.messageHandlers.AppGoBack.postMessage() 

这个方法必须要传参数才能被WK 解析到,改成

window.webkit.messageHandlers.AppGoBack.postMessage({

        'method': 'AppGoBack'   }

)

类似这样带参的就OK了。

二:WK调用JS  

1 在需要调用的地方写上

[webView evaluateJavaScript: method completionHandler:^(id_Nullableresult,NSError*_Nullableerror) {        NSLog(@"==%@----%@",result, error);

    }];

其中 method为JS 方法,需要注意的是当传中文是参数的写法,

不能直接传中文,要加上 ' ' 引号才行,不然JS没法接收 想这样传值

 NSString *cityStr = [NSString stringWithFormat:@"AppToWapAddAddressCookie('%@')",self.cString];   

 [webView evaluateJavaScript:cityStr completionHandler:^(id_Nullable result,NSError*_Nullable error) {        NSLog(@"==%@----%@",result, error);

    }];

相关文章

网友评论

      本文标题:关于JS与WKWebView交互的两个问题

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