URL 未在 swift 中的 WKWebView 中打开
URL is not opening in WKWebView in swift
我需要在 WKWebView 中打开 URL 并登录门户。由于用户成功登录之后我必须从 WKWebView 执行下载操作,一切工作正常但它在外部 safari 浏览器中打开但根据要求它应该在 WKWebView
中打开
WKWebView 的出口
@IBOutlet var webView: WKWebView!
在WKWebVIew中调用URL的函数
func loadURLInWebView() {
let url = URL(string: "https://www-qa.yyy.com/content/dash/en/public/login.html")
let urlRequest = URLRequest(url: url!)
if let webView = webView {
webView.load(urlRequest)
}
}
添加 decidePolicyFor 委托后,它会在 safari 中打开 url,但它应该在 WKWebView 中打开。我找不到问题。
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
guard url != nil else {
print(url!)
decisionHandler(.allow)
return
}
if url!.description.lowercased().starts(with: "http://") ||
url!.description.lowercased().starts(with: "https://") {
decisionHandler(.cancel)
UIApplication.shared.open(url!, options: [:], completionHandler: nil)
} else {
decisionHandler(.allow)
}
}
你处理 guard 语句的方式不对。在其他情况下,当 URL 为 nil 时将调用条件。
如果您执行 print(URL!) 否则您的应用程序将崩溃。此外,当 URL 为 null 时,您应该调用取消处理程序。
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else { // else will be called when url is nil
decisionHandler(.cancel)
return
}
if url.description.lowercased().starts(with: "http://") ||
url.description.lowercased().starts(with: "https://") {
decisionHandler(.allow)
} else {
decisionHandler(.cancel)
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}
我需要在 WKWebView 中打开 URL 并登录门户。由于用户成功登录之后我必须从 WKWebView 执行下载操作,一切工作正常但它在外部 safari 浏览器中打开但根据要求它应该在 WKWebView
中打开WKWebView 的出口
@IBOutlet var webView: WKWebView!
在WKWebVIew中调用URL的函数
func loadURLInWebView() {
let url = URL(string: "https://www-qa.yyy.com/content/dash/en/public/login.html")
let urlRequest = URLRequest(url: url!)
if let webView = webView {
webView.load(urlRequest)
}
}
添加 decidePolicyFor 委托后,它会在 safari 中打开 url,但它应该在 WKWebView 中打开。我找不到问题。
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
let url = navigationAction.request.url
guard url != nil else {
print(url!)
decisionHandler(.allow)
return
}
if url!.description.lowercased().starts(with: "http://") ||
url!.description.lowercased().starts(with: "https://") {
decisionHandler(.cancel)
UIApplication.shared.open(url!, options: [:], completionHandler: nil)
} else {
decisionHandler(.allow)
}
}
你处理 guard 语句的方式不对。在其他情况下,当 URL 为 nil 时将调用条件。 如果您执行 print(URL!) 否则您的应用程序将崩溃。此外,当 URL 为 null 时,您应该调用取消处理程序。
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else { // else will be called when url is nil
decisionHandler(.cancel)
return
}
if url.description.lowercased().starts(with: "http://") ||
url.description.lowercased().starts(with: "https://") {
decisionHandler(.allow)
} else {
decisionHandler(.cancel)
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
}