如何从 swift 中的 webView 获取 URL

How can I get the URL from webView in swift

我有问题,如何从 webView 中获取 url? 我执行以下代码并得到 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)
    }
}

你没有得到 url 因为 webView 还没有完成请求的 URL 的加载,你可以在 webViewDidFinishLoad 方法中得到那个 URL UIWebviewDelegate 个。为此,您需要使用当前的 ViewController 设置 webView 的委托,并且需要实施 UIWebviewDelegate.

webView.delegate = self

现在您可以在 webViewDidFinishLoad 方法中获取 webView 的当前加载 URL

func webViewDidFinishLoad(_ webView: UIWebView) {
    if let text = webView.request?.url?.absoluteString{
         print(text)
    }
}

这是一个 Swift 3 版本,请确保您已在 class 声明中添加 UIWebViewDelegate 并设置 webView.delegate = selfviewDidload():

func webViewDidFinishLoad(_ webView: UIWebView) {
    UIApplication.shared.isNetworkActivityIndicatorVisible = false

    let urlString = webView.request!.url!.absoluteString
    print("MY WEBVIEW URL: \(urlString)")
}

对于 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)")
    }
}

仅供参考:

如果您想查看哪个 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
}