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.