如何在 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.confirm
、window.alert
和 window.prompt
的调用都会路由到您的 WKUIDelegate
,这取决于您对这些调用发生的各种委托方法的实现。
就是说,您没有在代码中正确使用 completionHandler
- 它的参数应该反映用户所做的选择。
我的网页有多个确认对话框。他们属于不同的 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.confirm
、window.alert
和 window.prompt
的调用都会路由到您的 WKUIDelegate
,这取决于您对这些调用发生的各种委托方法的实现。
就是说,您没有在代码中正确使用 completionHandler
- 它的参数应该反映用户所做的选择。