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

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);

    }];

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容