iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導致crash的解決
前言
本文主要給大家介紹了關于iOS WKWebViewJavascriptBridge Xcode9中導致crash的相關解決辦法,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
WKWebViewJavascriptBridge 這個第三方還是比較不錯的,但是最近Xcode9上,卻出現(xiàn)了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
相關文章
iOS簡單登錄LoginViewController、注冊RegisterViewController等功能實現(xiàn)方法
這篇文章主要為大家詳細介紹了iOS簡單登錄LoginViewController、注冊RegisterViewController、UcenterViewController功能實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-09-09iOS的CoreAnimation開發(fā)框架中的Layer層動畫制作解析
在iOS中UIView層的屬性會映射到CoreAnimation框架的CALayer,這里我們來看一下iOS的CoreAnimation開發(fā)框架中的Layer層動畫制作解析,需要的朋友可以參考下2016-07-07詳解iOS應用使用Storyboard布局時的IBOutlet與IBAction
這篇文章主要介紹了iOS應用使用Storyboard布局時的IBOutlet與IBAction,文中還附帶講解了為什么IBOutlet屬性是weak的,需要的朋友可以參考下2016-04-04iOS中UIImagePickerController圖片選取器的用法小結
UIImagePickerController平時就是用來做應用中從相冊中選取圖片功能的,這里我們就來整理一下iOS中UIImagePickerController圖片選取器的用法小結,需要的朋友可以參考下2016-05-05IOS開發(fā)之多線程NSThiread GCD NSOperation Runloop
這篇文章主要介紹了IOS多線程開發(fā),主要用到NSThiread、GCD、 NSOperation、Runloop,有詳細的原理解析和實例代碼,對多線程感興趣的同學,可以參考下2021-04-04