【问题标题】:How can I get the URL from webView in swift如何快速从 webView 获取 URL
【发布时间】:2017-04-18 05:35:56
【问题描述】:
我有一个问题,我如何从webView 获取网址?
我执行以下代码并得到nil
我正在尝试的代码:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
webView.loadRequest(URLRequest(url: URL(string: "https://www.youtube.com/watch?v=Vv2zJErQt84")!))
if let text = webView.request?.url?.absoluteString{
print(text)
}
}
【问题讨论】:
标签:
swift
uiwebview
swift3
nsurl
【解决方案1】:
你没有得到 url 因为webView 没有完成请求的URL 的加载,你可以在UIWebviewDelegate 的webViewDidFinishLoad 方法中得到那个URL。为此,您需要使用当前的ViewController 设置webView 的委托,并且需要实现UIWebviewDelegate。
webView.delegate = self
现在您可以在webViewDidFinishLoad 方法中获取当前加载的URL 或webView。
func webViewDidFinishLoad(_ webView: UIWebView) {
if let text = webView.request?.url?.absoluteString{
print(text)
}
}
【解决方案2】:
这是一个 Swift 3 版本,确保你在你的类 dseclaration 中添加了UIWebViewDelegate 并在viewDidload() 中设置了webView.delegate = self:
func webViewDidFinishLoad(_ webView: UIWebView) {
UIApplication.shared.isNetworkActivityIndicatorVisible = false
let urlString = webView.request!.url!.absoluteString
print("MY WEBVIEW URL: \(urlString)")
}
【解决方案3】:
对于 swift 4 和 swift 4.2 使用 let url = webView.url?.absoluteString :-
首先导入WebKit:-
import WebKit
然后添加协议:-
class ViewController: UIViewController, WKNavigationDelegate
然后添加委托:-
//MARK:- WKNavigationDelegate
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print(error.localizedDescription)
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print("Strat to load")
if let url = webView.url?.absoluteString{
print("url = \(url)")
}
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print("finish to load")
if let url = webView.url?.absoluteString{
print("url = \(url)")
}
}
【解决方案4】:
仅供参考:
如果您想查看哪个 url 正在导航加载,请使用此委托方法。 navigationAction 专门显示正在导航的页面。它可以与 webview.url
不同
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
super.webView(webView, decidePolicyFor: navigationAction, decisionHandler: decisionHandler)
let request = navigationAction.request
}