WebViewアラートエラー
メイン画面のタブを選択時以下のようなエラーでアプリがクラッシュする場合がある。
Thread 1: "Completion handler passed to -[AgileWorks.WebViewController webView:runJavaScriptAlertPanelWithMessage:initiatedByFrame:completionHandler:] was not called"
原因については以下である。
▽ WebViewController.swift
func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) {
let alertController = UIAlertController(title: "", message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: localizadString(key: "OK", comment: ""), style: .default) { _ in
completionHandler()
}
alertController.addAction(okAction)
present(alertController, animated: true, completion: nil)
}
webViewでアラートが表示されるタイミングで上記が実行され、アラートのOK ボタン押下時にcompletionHandlerを実行する。
しかしエラーの内容は、completionHandlerが呼ばれていないとの内容である。
これは、アラート表示前にタブや更新など別の処理が割り込んだ際にcompletionHandlerの処理が完了せずに起こることが考えられる。
タブを高速で切り替えたりすると起こりやすい。
タブの高速タップによる更新防止のため、#28 (closed)でタブの初期画面の場合は更新を行わない処理を追加しているが、100%このエラーが起きないわけではない。
sbc-atled-aw-devによってに編集されました