我是靠谱客的博主 顺心小馒头,这篇文章主要介绍iOS开发之WKWebViewJavascriptBridge Xcode9中导致crash的解决,现在分享给大家,希望可以做个参考。

前言

本文主要给大家介绍了关于iOS WKWebViewJavascriptBridge Xcode9中导致crash的相关解决办法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

WKWebViewJavascriptBridge 这个第三方还是比较不错的,但是最近Xcode9上,却出现了crash;WKWebViewJavascriptBridge官方github看了大家也都有如此问题,最后终于解决了;

需要在WKWebViewJavascriptBridge类里,如下修改:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { if (webView != _webView) { return; } NSURL *url = navigationAction.request.URL; __strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate; if ([_base isWebViewJavascriptBridgeURL:url]) { if ([_base isBridgeLoadedURL:url]) { [_base injectJavascriptFile]; } else if ([_base isQueueMessageURL:url]) { [self WKFlushMessageQueue]; } else { [_base logUnkownMessage:url]; } decisionHandler(WKNavigationActionPolicyCancel); } else { /// 在这新添加了else if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) { [_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } else { decisionHandler(WKNavigationActionPolicyAllow); } } }

或这样修改

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { if (webView != _webView) { return; } NSURL *url = navigationAction.request.URL; __strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate; if ([_base isWebViewJavascriptBridgeURL:url]) { if ([_base isBridgeLoadedURL:url]) { [_base injectJavascriptFile]; } else if ([_base isQueueMessageURL:url]) { [self WKFlushMessageQueue]; } else { [_base logUnkownMessage:url]; } decisionHandler(WKNavigationActionPolicyCancel); /// 在这新添加了return return; } if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) { [_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler]; } else { decisionHandler(WKNavigationActionPolicyAllow); } }

我猜测主要原因是 Xcode9上,decisionHandler() 这个block回调,不允许多次被调用;

总结

以上就是这篇文章的全部内容了,本文还有许多不足,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对靠谱客的支持。

参考链接

1、 https://github.com/marcuswestin/WebViewJavascriptBridge/issues/302

2、http://www.jianshu.com/p/909afcbc401e

最后

以上就是顺心小馒头最近收集整理的关于iOS开发之WKWebViewJavascriptBridge Xcode9中导致crash的解决的全部内容,更多相关iOS开发之WKWebViewJavascriptBridge内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(148)

评论列表共有 0 条评论

立即
投稿
返回
顶部