Existe-t-il un moyen d'obtenir l'URL COMPLÈTE chargée par un WKWebView
pour chaque demande?
webView:didFinishNavigation:
Fonctionne uniquement pour les navigations mainFrame
et ne fournit pas de paramètre de demande d'URL.
Comment puis-je obtenir l'URL complète comme dans UIWebViewDelegate
webViewDidFinishLoad:webView
... qui est invoqué une fois le chargement terminé et vous pouvez obtenir l'URL de demande complète à partir du paramètre webView
.
C'est bien que la propriété WKWebView
de URL
enregistre le travail qui doit être fait pour extraire une URL de base compatible avec l'interface utilisateur, mais c'est une perte énorme que nous ne pouvons pas obtenir la pleine!
J'ai essayé d'utiliser
webView:decidePolicyForNavigationAction:decisionHandler:
... mais elle produit des résultats différents pour les URL par rapport à ce qu'une propriété UIWebView
request
contient après avoir terminé le chargement d'une page.
Tout d'abord, je pense que vous confondez NSURL
et NSURLRequest
. Le premier est facilement accessible via webView.URL
et il vous donne en fait RL complète de tout ce qui a été chargé. En supposant que là où vous dites URL vous voulez dire NSURL
.
Si ce n'est pas ce que vous vouliez dire, par exemple si vous vouliez voir la chaîne de redirection ou les en-têtes de réponse, alors je crains que la réponse soit que vous ne pouvez pas accéder aux informations spécifiques via le WKWebView
.
Vous devrez vous replier sur UIWebView
où vous pourrez intercepter les demandes relativement facilement et voir la demande/réponse complète.
Vous pouvez obtenir l'URL d'une page Web nouvellement demandée par "navigationAction.request.URL" dans la méthode déléguée decidePolicyForNavigationAction.
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)
}
C'est réponse de Yuichi Kato pour Swift 4. Il récupère l'URL complète de la propriété request
de l'action de navigation dans le webView(_:decidePolicyFor:decisionHandler:)
méthode de 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)
}
N'oubliez pas de conformer votre classe à WKNavigationDelegate
et définissez le délégué de votre vue Web en conséquence:
class WebViewController: UIViewController, WKNavigationDelegate
[...]
webView.navigationDelegate = self