溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何解決iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的問題

發(fā)布時(shí)間:2021-08-05 11:02:54 來源:億速云 閱讀:117 作者:小新 欄目:移動(dòng)開發(fā)

小編給大家分享一下如何解決iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

WKWebViewJavascriptBridge 這個(gè)第三方還是比較不錯(cuò)的,但是最近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);
 }
}

我猜測(cè)主要原因是 Xcode9上,decisionHandler() 這個(gè)block回調(diào),不允許多次被調(diào)用;

以上是“如何解決iOS開發(fā)之WKWebViewJavascriptBridge Xcode9中導(dǎo)致crash的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI