WKWebView 遇到 NSInternalInconsistencyException runJavaScriptAlertPanelWithMessage: was not called
Completion handler passed to -[xxx.BaseWebViewController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:] was not called
从 crash 可以看出是 WKWebView 回调函数: runJavaScriptAlertPanelWithMessage中completionHandler 没有被调用导致的。
出现情况可能是WKWebView 退出的时候,JS刚好执行了window.alert(), alert 框可能弹不出来,completionHandler 最后没有被执行,导致 crash;另一种情况是在 WKWebView 一打开,JS就执行window.alert(),这个时候由于 WKWebView 所在的 UIViewController 出现(push或present)的动画尚未结束,alert 框可能弹不出来,completionHandler 最后没有被执行,导致 crash。
解决办法如下:
#pragma mark -- WKUIDelegate
- (void)webView:(WKWebView *)webView runJavaScriptAlertPanelWithMessage:(NSString *)message initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(void))completionHandler{
if ([self.navigationController visibleViewController] != self)
{
completionHandler();
return;
}
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:message preferredStyle:UIAlertControllerStyleAlert];

本文介绍了解决WKWebView在iOS应用中因JavaScript Alert导致的崩溃问题的方法。通过检查和调整WKWebView的delegate方法,确保即使在特殊情况下也能正确处理JavaScript Alert对话框。

4167

被折叠的 条评论
为什么被折叠?



