使用WKWebView的时候会出现明明本身作的一些页面有提示框, 为何使用别人的页面提示框老是不显示, 其实很大部分缘由是由于该提示框是经过JS调用的, 须要实现WKUIDelegate来进行监听web
// MARK: - WKUIDelegate // 监听经过JS调用警告框 func webView(_ webView: WKWebView, runJavaScriptAlertPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping () -> Void) { let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in completionHandler() })) self.present(alert, animated: true, completion: nil) } // 监听经过JS调用提示框 func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) { let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { (action) in completionHandler(true) })) alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: { (action) in completionHandler(false) })) self.present(alert, animated: true, completion: nil) } // 监听JS调用输入框 func webView(_ webView: WKWebView, runJavaScriptTextInputPanelWithPrompt prompt: String, defaultText: String?, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (String?) -> Void) { // 相似上面两个方法 }
这里须要注意, completionHandler必定要调用, 不然会出错!api