如何在 iOS WKWebView 中过滤来自不同 URL 的确认对话框

How to filter confirm dialogs from different URLs in iOS WKWebView

我的网页有多个确认对话框。他们属于不同的 URLs

window.confirm("Hello") -> /hello
window.confirm("Exit") -> /confirm

我有我的视图控制器:

class View2Controller: UIViewController, WKUIDelegate {
var webView: WKWebView!
...
override func viewDidLoad() {
webView = WKWebView(frame: CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height), configuration: WKWebViewConfiguration())

        self.view.addSubview(webView)
        let myURL = URL(string:"https://www.myweb.com")
        let myRequest = URLRequest(url: myURL!)
        webView.uiDelegate = self
        webView.load(myRequest)

... ...

func webView(_ webView: WKWebView, runJavaScriptConfirmPanelWithMessage message: String, initiatedByFrame frame: WKFrameInfo, completionHandler: @escaping (Bool) -> Void) {
            let ac = UIAlertController(title: "Title", message: message, preferredStyle: .alert)
            ac.addAction(UIAlertAction(title: "OK", style: .default, handler: { (UIAlertAction) in
                ...
            }))
            ac.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
            self.present(ac, animated: true)
        completionHandler(true)
        }

我是否可以在 /confirm URL 中仅使用 iOS 警报进行退出确认并使用 Web 确认对话框进行 Hello ?

使用 WKWebView 时没有 "web confirm" 对话框。所有对 windowc.confirmwindow.alertwindow.prompt 的调用都会路由到您的 WKUIDelegate,这取决于您对这些调用发生的各种委托方法的实现。

就是说,您没有在代码中正确使用 completionHandler - 它的参数应该反映用户所做的选择。