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

Posted

技术标签:

【中文标题】如何在 iOS WKWebView 中过滤来自不同 URL 的确认对话框【英文标题】:How to filter confirm dialogs from different URLs in iOS WKWebView 【发布时间】:2020-04-01 05:19:21 【问题描述】:

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

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 警报来确认退出,并为 Hello 使用网络确认对话框?

【问题讨论】:

【参考方案1】:

当您使用WKWebView 时,没有“网络确认”对话框。所有对windowc.confirmwindow.alertwindow.prompt 的调用都会路由到您的WKUIDelegate,而这些调用会发生什么取决于您对各种委托方法的实现。

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

【讨论】:

以上是关于如何在 iOS WKWebView 中过滤来自不同 URL 的确认对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WKWebView 中垂直居中文本?

IOS - 来自本地HTML文件的WKWebView中的CORS

swift [初学者来自iOS中WKWebView的简单浏览器] Chp6的青铜挑战程序设计查看Big Nerd Ranch #tags:swift3,ios,UIView,WKWebview

来自html字符串的iOS Swift 4图像未在WKWebView中加载

使用WKWebView替换UIWebView

如何在 iOS 应用程序 WkWebView 中调试 javascript?