如何在Swift中从webView获取URL

6

我有一个问题,如何从 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)
    }
}
4个回答

16
您无法获取URL,因为webView尚未完成所请求的URL的加载,您可以在UIWebviewDelegatewebViewDidFinishLoad方法中获取该URL。为此,您需要使用当前ViewController设置webView的委托,并需要实现UIWebviewDelegate
webView.delegate = self

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

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

@HaiderAhmed 欢迎,伙计 :) - Nirav D
我能否获取视频URL而不是WebView URL?如果您知道,请查看此链接并帮助我:https://dev59.com/blMI5IYBdhLWcg3wxudI - Virani Vivek

7

针对 Swift 5Swift 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)")
    }
}

2

这里是一个 Swift 3 版本的示例,确保您已经在类声明中添加了 UIWebViewDelegate 并在 viewDidload() 中设置了 webView.delegate = self

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

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

0

提醒:

如果您想查看正在加载的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
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接