Ottieni l'URL corrente di UIWebView


110

Ho già provato ricevendo l'URL corrente della mia UIWebViewcon: webview.request.URL. Purtroppo il NSURLera vuoto. Qualcosa non va qui? Sto lavorando con Xcode 3.2.2 beta 5.

Il codice precedente dovrebbe essere eseguito nel UIWebViewdelegato didStartLoad.


Fai quel codice currentURL = currentWebView.request.URL.absoluteString; dopo il caricamento della visualizzazione Web, quindi utilizzare - (void) webViewDidFinishLoad: (UIWebView *) webView. Forse questo potrebbe aiutare.
Xcoder

OP, considerando che questa domanda ha 78k visualizzazioni è abbastanza ben referenziata. Ti dispiacerebbe aggiornare la risposta accettata a quella fortemente più votata per evitare confusione futura? Grazie!
Albert Renshaw

Risposte:


45

La versione di Matt è molto più pulita. Consiglio a tutti di usare quello invece di questo

Potresti provare questo:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

Grazie. Il mio codice sopra funziona durante l'esecuzione in didFinishLoad .... Da qualche parte ho letto che la versione js non funziona su ogni pagina. Ma ci proverò.
danielreiser

11
Matt la sua versione è molto più pulita. Quindi sì, consiglio a tutti di usare quello invece di questo.
Rengers

1
Questo è l'unico modo in cui funziona, ad esempio, su m.youtube.com. Tutte le altre risposte restituiscono URL errati.
cprcrack

2
In realtà valuto "document.URL" e non "window.location" (che per me era sempre vuoto). Questo è utile per aggiustamenti interni all'URL della pagina su siti pesanti JS che potrebbero non utilizzare i caricamenti di pagina tradizionali.
SmartyP

1
Alle due persone sopra - Aubada Taljo e Taranfx - Rengers ha notato abbastanza audacemente (letteralmente, il testo è in grassetto) e umilmente che le persone dovrebbero usare la versione di Matt con più di 230 Mi piace su di essa sotto. Chiaramente al momento della risposta, ha funzionato ed è stato accettato e anche più di 30 persone hanno ritenuto che funzionasse. Questo ora ha 5,5 anni. Roba buona, Rengers. Grazie per aver indicato alle persone la risposta di Matt di seguito.
App Dev Guy

317

window.location tramite JS non ha funzionato in modo affidabile per me, ma questo ha funzionato:

currentURL = currentWebView.request.URL.absoluteString;

Credito: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
Otterrai un URL errato se il tuo sito caricherà alcuni annunci in un'altra richiesta. Variante più chiara scritta daMark Sands
OdNairy il

non funziona per i risultati di ricerca di google. Durante l'accesso ai risultati di ricerca da Google, mi mostra l'URL di Google non l'URL della pagina dei risultati di ricerca. Qualsiasi aiuto .........
Nirav Gadhiya

@iOSDeveloper Google probabilmente utilizza lo stato push "HTML5" per manipolare l'URL che non implica l'esecuzione di un'altra richiesta (quindi currentWebView.request non viene aggiornato).
danw

3
Questo metodo non sembra funzionare se il sito web ha eseguito un history.pushState
andrrs

1
In Swift 4: webView.request? .MainDocumentURL? .AbsoluteString
DmitryKanunnikoff

55

ecco il codice che utilizzo per acquisire l'URL ogni volta che navighi su un link diverso all'interno della visualizzazione web:

- (void)webViewDidFinishLoad:(UIWebView *)aWebView
{
  self.url = aWebView.request.mainDocumentURL;
}

quando provo questo, il metodo non viene mai chiamato. C'è qualcosa che potrei perdere?
Greg

1
@greg assicurati di impostarti come delegato di
UIWebView

1
questo ha funzionato per me mentre webView.request.URL.absoluteStringtornatinil
bendytree

Grazie, questo ha funzionato anche per me ed è meglio di currentWebView.request.URL.absoluteString;
web hobbit

36

Anch'io ho scoperto che la risposta approvata sopra non era affidabile. Ma con una leggera modifica, sembra funzionare ogni volta:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

Notare l'aggiunta di ".href" al Javascript poiché è nascosto alla fine della riga di codice.


2
Grazie SarahR, il tuo metodo funziona anche se UIWebView ha caricato una pagina solo parzialmente.
Dmitry Makarenko

18

Questo non è corretto e restituirà uno zero:

NSString *currentURL = [webView stringByEvaluatingJavaScriptFromString:@"window.location"];

Tuttavia, il codice seguente può ottenere un URL, ma l'URL potrebbe non essere l'URL corrente:

NSString *url = _webView.request.URL.absoluteString;

Quello corretto è:

NSString *currentURL = [_webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

8
- (void)webViewDidFinishLoad:(UIWebView *)webView{
     NSURL *currentURL = [[webView request] URL];
     NSLog(@"%@",[currentURL description]);

}

4

Ho provato questo per i risultati di ricerca di Google su iPhone:

 NSString* currentURL = webView.request.URL.absoluteString;
 NSString* mainDocumentURL = webView.request.mainDocumentURL.absoluteString;

Entrambi restituiscono la stessa stringa!


3

qui il codice che uso:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:[[[webView request] URL] absoluteString]]];

5
Stai creando un NSURL ottenendo la stringa da un NSURL esistente; non potresti semplicemente copiare webView.request.URL?
Pascal


2

Uso l' shouldStartLoadWithRequestevento (UIWebViewDelegate) per rilevare gli aggiornamenti dell'URL. request.mainDocumentURL.absoluteStringti porterà l'URL della pagina web principale (che normalmente è quello che vuoi), mentre request.URL.absoluteStringincluderà CSS e JavaScript include.


2

Funziona sempre. .

NSString* url= [webView stringByEvaluatingJavaScriptFromString:@"window.location.href"];

2

implementare il metodo delegato,

- (BOOL)webView:(UIWebView *)webview shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSString  *URL = request.URL.absoluteString;    NSLog(@"%@",URL);
}

L'URL è ciò di cui avevi esattamente bisogno.


1

IN Swift prova questo,

func webViewDidFinishLoad(webView: UIWebView){
    println(WebView.request?.mainDocumentURL)
}

1

Per ottenere l'URL corrente di WKWebView e UIWebview

Ecco il codice.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.