2014-10-13 6 views
11

C'è un modo per caricare l'URL FULL da WKWebView per ogni richiesta.WKWebView full URL

webView:didFinishNavigation: 

Funziona solo per le navigazioni mainFrame e non fornisce un parametro di richiesta url.

Come posso ottenere l'URL completo, proprio come in di UIWebViewDelegate

webViewDidFinishLoad:webView 

che vengono sta richiamato dopo eventuali finiture di carico e si può ottenere la richiesta URL completo dal parametro WebView. È bello che la proprietà URL di WKWebView salvi il lavoro che è necessario fare per estrarre un URL di base UI, ma è una perdita enorme che non possiamo ottenere quella completa!

Ho provato con

WebView: decidePolicyForNavigationAction: decisionHandler:

ma produce risultati diversi per URULs rispetto a quale proprietà la richiesta di un UIWebView tiene dopo aver terminato il carico di una pagina

+0

Vuoi Non utilizzare il 'WKNavigationDelegate' per questo, cercando su richiesta' webView's per ogni richiesta in qualcosa di simile '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 non ha proprietà "request" come UIWebView. O c'è un modo per ottenere la richiesta dall'oggetto WKNavigation? –

+0

Bene, la WKNavigationAction ha una proprietà request di tipo NSURLRequest – leviathan

risposta

9

In primo luogo, Penso che tu stia confondendo NSURL e NSURLRequest. Il primo è facilmente accessibile tramite webView.URL e in realtà fornisce l'URL completo di ciò che è stato caricato. Supponendo che dove dici URL intendi NSURL.

Se questo non è ciò che intendevi, ad esempio se si desidera visualizzare la catena di reindirizzamento o le intestazioni di risposta, allora temo che la risposta sia che non è possibile ottenere informazioni specifiche tramite lo WKWebView.

È necessario tornare a UIWebView in cui è possibile intercettare le richieste in modo relativamente semplice e visualizzare la richiesta/risposta completa.

+0

Grazie mille Stefan per la tua volontà di aiutare ma penso che tu non abbia capito il mio caso o la classe WKWebView. Il webView.URL ti dà - Questo è l'URL che dovrebbe riflettersi nell'interfaccia utente. Questa è una stringa di URL UI friendly che non include path, query e così via. Per FULL intendo l'URL includendo tutte le sue parti, ad esempio quella che proviene da una richiesta generata automaticamente quando si interagisce con la pagina Web caricata nella vista Web. Ho trovato un modo per arrivare a questo utilizzando il nuovo protocollo di delega di navigazione. WKWebView è molto meglio di UIWebView e ti incoraggio ad approfondirlo –

+0

Ancora non capisco cosa intendi con * full * URL. Sto stampando 'webView.URL' come test e vedo che ha tutti i bit in là, il percorso, la query, il frammento, ecc.Sono curioso di sapere quali informazioni ti mancano? –

+0

Si noti inoltre che 'webView.URL' non ha nulla a che fare con l'interfaccia utente. È * non * una stringa UI-friendly, invece è un'istanza 'NSURL' che riflette la pagina che è attualmente caricata nel' WKWebView'. –

6

È possibile ottenere l'URL per una pagina Web appena richiesta da "navigationAction.request.URL" nel metodo delegato 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) 
} 
+1

grazie, mi ha aiutato –