WKWebView不显示提示框(Swift)

Posted Rinpe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WKWebView不显示提示框(Swift)相关的知识,希望对你有一定的参考价值。

使用WKWebView的时候会出现明明自己做的一些页面有提示框, 为什么使用别人的页面提示框总是不显示, 其实很大部分原因是因为该提示框是通过JS调用的, 需要实现WKUIDelegate来进行监听

// 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一定要调用, 否则会出错!

以上是关于WKWebView不显示提示框(Swift)的主要内容,如果未能解决你的问题,请参考以下文章

swift iOS 11.2 WKWebView 不显示

如何使用 swift 在 WKWebView 的页面中间显示活动指示器?

当特定屏幕以 html 显示时,从 WKWebView 向 Swift 获取通知

即使在启用 Javascript 后 WKWebView 也无法正常工作 - Swift

swift 笔记:iOS与JavaScript的交互(三):WKWebView 3. WKUiDelegate - 3.处理提示符()

使用 Swift 4 滚动 WKWebview