iOS开发之WKWebViewJavascriptBridge Xcode9中导致crash的解决
程序员文章站
2023-12-20 15:46:16
前言
本文主要给大家介绍了关于ios wkwebviewjavascriptbridge xcode9中导致crash的相关解决办法,分享出来供大家参考学习,下面话不多说...
前言
本文主要给大家介绍了关于ios wkwebviewjavascriptbridge xcode9中导致crash的相关解决办法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
wkwebviewjavascriptbridge 这个第三方还是比较不错的,但是最近xcode9上,却出现了crash;wkwebviewjavascriptbridge官方github看了大家也都有如此问题,最后终于解决了;
需要在wkwebviewjavascriptbridge类里,如下修改:
- (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); } } }
或这样修改
- (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