获取WKWebView的当前完整URL

时间:2014-10-13 14:36:03

标签: wkwebview wknavigationdelegate

有没有办法让WKWebView为每个请求加载FULL URL?

webView:didFinishNavigation:

仅适用于mainFrame导航,不提供URL请求参数。

如何像UIWebViewDelegate

一样获取完整网址
webViewDidFinishLoad:webView

...在任何加载完成后调用,您可以从webView参数获取完整的请求网址。

很高兴WKWebView的{​​{1}}属性可以保存为提取界面友好的基本URL而需要完成的工作,但这是一个巨大的损失,我们无法获得完整的URL!

我尝试过使用

URL

...但与完成页面加载后webView:decidePolicyForNavigationAction:decisionHandler: 的{​​{1}}属性相比,它会产生不同的网址结果。

3 个答案:

答案 0 :(得分:14)

您可以通过" navigationAction.request.URL"获取新请求的网页的网址。在decisionPolicyForNavigationAction委托方法中。

func webView(webView: WKWebView, decidePolicyForNavigationAction navigationAction: WKNavigationAction, decisionHandler: (WKNavigationActionPolicy) -> Void) {
   if let urlStr = navigationAction.request.URL?.absoluteString{
      //urlStr is what you want, I guess.
   }
   decisionHandler(.Allow)
}

答案 1 :(得分:10)

首先,我认为你让NSURLNSURLRequest感到困惑。第一个可以通过webView.URL轻松访问,它实际上会为您提供已加载的完整URL 。假设您说 URL 的位置是NSURL

如果那不是您的意思,例如,如果您想查看重定向链或响应标题,那么我担心答案是您无法通过WKWebView获取具体信息。

您必须回到UIWebView,在那里您可以相对轻松地拦截请求并查看完整的请求/响应。

答案 2 :(得分:5)

对于Swift 4,这是Yuichi Kato's answer。它会使用request webView(_:decidePolicyFor:decisionHandler:)方法中导航操作的WKNavigationDelegate属性检索完整网址。

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    if let urlStr = navigationAction.request.url?.absoluteString {
        //urlStr is what you want
    }

    decisionHandler(.allow)
}

不要忘记让您的班级符合WKNavigationDelegate并相应地设置您的网络视图代表:

class WebViewController: UIViewController, WKNavigationDelegate

[...]

webView.navigationDelegate = self