最近APP项目在iOS 11 下运行的时候,出现了崩溃。情况如下:就是在使用WKWebView加载本地HTML文件过程中,突然崩溃,实在费解,找了好久,得到一个解决办法,在此记录下来。首先项目中需要JS和原生交互,所以使用了第三方WKWebViewJavascriptBridge,问题就是出现在了这个第三方里面:
首先找到WKWebViewJavascriptBridge.m文件,然后在此文件中找到以下方法:
- (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;// iOS11或xcode9中,此处必须要加一个return,否则就会崩溃。
}
if (strongDelegate && [strongDelegate respondsToSelector:@selector(webView:decidePolicyForNavigationAction:decisionHandler:)]) {
[_webViewDelegate webView:webView decidePolicyForNavigationAction:navigationAction decisionHandler:decisionHandler];
} else {
decisionHandler(WKNavigationActionPolicyAllow);
}
}
网友评论