有没有办法让WKWebView
为每个请求加载FULL URL?
webView:didFinishNavigation:
仅适用于mainFrame
导航,不提供URL请求参数。
如何像UIWebViewDelegate
的
webViewDidFinishLoad:webView
...在任何加载完成后调用,您可以从webView
参数获取完整的请求网址。
很高兴WKWebView
的{{1}}属性可以保存为提取界面友好的基本URL而需要完成的工作,但这是一个巨大的损失,我们无法获得完整的URL!
我尝试过使用
URL
...但与完成页面加载后webView:decidePolicyForNavigationAction:decisionHandler:
的{{1}}属性相比,它会产生不同的网址结果。
答案 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)
首先,我认为你让NSURL
和NSURLRequest
感到困惑。第一个可以通过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