2014-10-13 7 views
11

Gibt es eine Möglichkeit, die vollständige URL von einem WKWebView für jede Anforderung geladen zu erhalten.Vollständige WKWebView-URL

webView:didFinishNavigation: 

Funktioniert nur für mainFrame-Navigationen und bietet keinen URL-Anforderungsparameter.

Wie erhalte ich die vollständige URL wie in UIWebViewDelegate der

webViewDidFinishLoad:webView 

nach eventuellen Laden beendet aufgerufen erhalten, und Sie können die vollständige URL aus dem webView Parameter erhalten. Es ist schön, dass die URL-Eigenschaft von WKWebView die Arbeit speichert, die getan werden muss, um eine UI-freundliche Basis-URL zu extrahieren, aber es ist ein großer Verlust, den wir nicht voll bekommen können!

Ich habe versucht,

webView mit: decidePolicyForNavigationAction: decisionHandler:

Aber es zu unterschiedlichen Ergebnissen für URULs im Vergleich zu dem, was eine Anforderung Eigenschaft hält die UIWebView nach der Last einer Seite

+0

Möchten Sie nicht die 'WKNavigationDelegate' dafür verwenden, indem für jede Anforderung in etwas an der' webView's Anfrage suchen, wie 'webView: didStartProvisionalNavigation:'? https://developer.apple.com/library/IOs/documentation/WebKit/Reference/WKNavigationDelegate_Ref/index.html#//apple_ref/occ/intfm/WKNavigationDelegate/webView:didStartProvisionalNavigation: – Popeye

+0

WKWebView hat keine "request" -Eigenschaft wie UIWebView. Oder gibt es eine Möglichkeit, die Anfrage vom WKNavigation-Objekt zu erhalten? –

+0

Nun, die WKNavigationAction hat eine Anfrage-Eigenschaft des Typs NSURLRequest – leviathan

Antwort

9

Erstausrüstung, Ich denke du verwirrst NSURL und NSURLRequest. Die erste ist leicht zugänglich über webView.URL und es gibt Ihnen tatsächlich die vollständige URL von was auch immer geladen wurde. Angenommen, Sie sagen URL meinen Sie NSURL.

Wenn Sie das nicht gemeint haben, zum Beispiel wenn Sie die Redirect-Kette oder die Antwort-Header sehen wollten, dann habe ich die Befürchtung, dass Sie nicht über die WKWebView zu dieser spezifischen Information gelangen.

Sie müssen auf UIWebView zurückfallen, wo Sie Anfragen relativ leicht abfangen und die vollständige Anfrage/Antwort sehen können.

+0

Vielen Dank Stefan für Ihren Willen zu helfen, aber denke, Sie haben meine Fall oder WKWebView Klasse nicht verstanden. Die webView.URL gibt Ihnen Folgendes: Dies ist die URL, die in der Benutzeroberfläche angezeigt werden soll. Dies ist eine URL-freundliche URL-Zeichenfolge, die Pfad, Abfrage usw. nicht enthält. Mit FULL meine ich die URL einschließlich aller Teile, d. H. Diejenige, die von einer automatisch erzeugten Anfrage kommt, wenn sie mit der in der Web-Ansicht geladenen Webseite interagiert. Ich habe einen Weg gefunden, mit dem neuen Navigationsdelegate-Protokoll zu diesem Thema zu gelangen. WKWebView ist viel besser als UIWebView und ich ermutige Sie, tiefer darin zu tauchen –

+0

Ich verstehe immer noch nicht, was Sie mit * Full * URL meinen. Ich drucke die "webView.URL" als Test und ich sehe, dass es alle Bits dort, den Pfad, die Abfrage, das Fragment usw. enthält.Ich bin gespannt welche Informationen fehlen Ihnen? –

+0

Beachten Sie auch, dass 'webView.URL' nichts mit der Benutzeroberfläche zu tun hat. Es ist * nicht * ein benutzerfreundlicher String, stattdessen ist es eine ful 'NSURL'-Instanz, die die Seite widerspiegelt, die gerade in' WKWebView' geladen ist. –

6

Sie können die URL für eine neu angeforderte Webseite von "navigationAction.request.URL" in der delegate-Methode decidePolicyForNavigationAction abrufen.

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

danke, das hat mir geholfen –