iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的解決
前言
本文主要給大家介紹了關(guān)于iOS WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的相關(guān)解決辦法,分享出來(lái)供大家參考學(xué)習(xí),下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。
WKWebViewJavascriptBridge 這個(gè)第三方還是比較不錯(cuò)的,但是最近Xcode9上,卻出現(xiàn)了crash;WKWebViewJavascriptBridge官方github看了大家也都有如此問(wèn)題,最后終于解決了;
需要在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);
}
}
我猜測(cè)主要原因是 Xcode9上,decisionHandler() 這個(gè)block回調(diào),不允許多次被調(diào)用;
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,本文還有許多不足,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
參考鏈接
1、 https://github.com/marcuswestin/WebViewJavascriptBridge/issues/302
2、http://www.jianshu.com/p/909afcbc401e
相關(guān)文章
IOS開發(fā)中異步網(wǎng)絡(luò)請(qǐng)求上實(shí)現(xiàn)同步邏輯
這篇文章主要介紹了IOS開發(fā)中異步網(wǎng)絡(luò)請(qǐng)求上實(shí)現(xiàn)同步邏輯的相關(guān)資料,需要的朋友可以參考下2017-03-03
iOS的CoreAnimation開發(fā)框架中的Layer層動(dòng)畫制作解析
在iOS中UIView層的屬性會(huì)映射到CoreAnimation框架的CALayer,這里我們來(lái)看一下iOS的CoreAnimation開發(fā)框架中的Layer層動(dòng)畫制作解析,需要的朋友可以參考下2016-07-07
iOS項(xiàng)目開發(fā)鍵盤彈出遮擋輸入框問(wèn)題解決方案
大家在用IOS開發(fā)項(xiàng)目的時(shí)候,經(jīng)常出現(xiàn)鍵盤彈出遮擋輸入框問(wèn)題,小編給大家整理的這個(gè)問(wèn)題的處理方法,一起學(xué)習(xí)下。2018-01-01
iOS UICollectionView實(shí)現(xiàn)標(biāo)簽選擇器
這篇文章主要為大家詳細(xì)介紹了iOS UICollectionView實(shí)現(xiàn)標(biāo)簽選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04
iOS源碼閱讀必備知識(shí)之Tagged Pointer
這篇文章主要給大家介紹了關(guān)于iOS源碼閱讀必備知識(shí)之Tagged Pointer的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07
iOS App開發(fā)中通過(guò)UIDevice類獲取設(shè)備信息的方法
UIDevice最常見的用法就是用來(lái)監(jiān)測(cè)iOS設(shè)備的電量了,然后再實(shí)現(xiàn)電池狀態(tài)通知非常方便,除此之外還有傳感器等信息的獲取,這里我們就來(lái)總結(jié)一下iOS App開發(fā)中通過(guò)UIDevice類獲取設(shè)備信息的方法:2016-07-07

