Obtener la URL actual de UIWebView


110

Ya he intentado conseguir la URL actual de mi UIWebViewcon: webview.request.URL. Desafortunadamente, el NSURLestaba vacío. ¿Algo anda mal aquí? Estoy trabajando con Xcode 3.2.2 beta 5.

El código anterior debe ejecutarse en el UIWebViewdelegado didStartLoad.


Haga ese código currentURL = currentWebView.request.URL.absoluteString; después de que se cargue la vista web, utilice - (void) webViewDidFinishLoad: (UIWebView *) webView. Quizás esto pueda ayudar.
Xcoder

OP, considerando que esta pregunta tiene 78k vistas, es una bastante bien referenciada. ¿Le importaría actualizar la respuesta aceptada a la más votada para evitar confusiones futuras? ¡Gracias!
Albert Renshaw

Respuestas:


45

La versión de Matt es mucho más limpia. Recomiendo a todos que usen ese en lugar de este

Puedes probar esto:

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

Gracias. Mi código anterior funciona cuando se ejecuta en didFinishLoad .... En algún lugar he leído que la versión js no funciona en todas las páginas. Pero lo intentaré.
danielreiser

11
Matt su versión es mucho más limpia. Así que sí, recomiendo a todos que usen ese en lugar de este.
Rengers

1
Esta es la única forma en que funciona, por ejemplo, en m.youtube.com. Todas las demás respuestas devuelven URL incorrectas.
cprcrack

2
De hecho, evalúo "document.URL" y no "window.location" (que siempre estaba en blanco para mí). Esto es útil para los ajustes internos de la URL de la página en sitios pesados ​​de JS que pueden no usar cargas de página tradicionales.
SmartyP

1
Para las dos personas anteriores, Aubada Taljo y Taranfx, Rengers ha señalado con bastante audacia (literalmente, el texto es en negrita) y con humildad que la gente debería usar la versión de Matt con más de 230 me gusta a continuación. Claramente, al momento de responder esto, funcionó y fue aceptado y más de 30 personas sintieron que también funcionó. Esto ahora tiene 5.5 años. Buen material, Rengers. Gracias por indicarle a la gente la respuesta de Matt a continuación.
App Dev Guy

317

window.location a través de JS no funcionó de manera confiable para mí, pero esto sí:

currentURL = currentWebView.request.URL.absoluteString;

Crédito: http://mohrt.blogspot.com/2008/10/getting-url-from-uiwebview.html


9
Obtendrá una URL incorrecta si su sitio carga algunos anuncios en otra solicitud. Variante más clara escrita porMark Sands
OdNairy

no funciona para los resultados de búsqueda de Google. Al acceder a los resultados de búsqueda de Google, me muestra la URL de Google, no la URL de la página de resultados de búsqueda. Cualquier ayuda .........
Nirav Gadhiya

@iOSDeveloper Google probablemente usa el estado push "HTML5" para manipular la URL, lo que no implica ejecutar otra solicitud (por lo que currentWebView.request no se actualiza).
danw

3
Este método no parece funcionar si el sitio web ha realizado un history.pushState
andrrs

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

55

aquí está el código que utilizo para tomar la URL cada vez que navega a un enlace diferente dentro de la vista web:

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

cuando intento esto, nunca se llama al método. ¿Hay algo que me pueda perder?
Greg

1
@greg asegúrese de establecerse como delegado de
UIWebView

1
esto funcionó para mí mientras webView.request.URL.absoluteStringregresabanil
bendytree

Gracias, esto funcionó para mí también y es mejor que currentWebView.request.URL.absoluteString;
web hobbit

36

Yo también descubrí que la respuesta aprobada anterior no era confiable. Pero con una ligera modificación, parece funcionar siempre:

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

Tenga en cuenta la adición de ".href" al Javascript ya que está oculto al final de la línea de código.


2
Gracias SarahR, su método funciona incluso si UIWebView cargó una página solo en parte.
Dmitry Makarenko

18

Esto no es correcto y devolverá un cero:

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

Sin embargo, el código siguiente puede obtener una URL, pero es posible que la URL no sea la URL actual:

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

El correcto es:

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

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

}

4

Intenté esto para los resultados de búsqueda de Google en iPhone:

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

¡Ambos devuelven la misma cadena!


3

aquí el código que uso:

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

5
Está creando una NSURL obteniendo la cadena de una NSURL existente; ¿No podrías simplemente copiar webView.request.URL?
Pascal


2

Utilizo el shouldStartLoadWithRequestevento (UIWebViewDelegate) para detectar actualizaciones de URL. request.mainDocumentURL.absoluteStringobtendrá la URL de la página web principal (que normalmente es lo que desea), mientras request.URL.absoluteStringque incluirá CSS y JavaScript.


2

Esto siempre funciona. .

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

2

implementar el método delegado,

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

URL es exactamente lo que necesitabas.


1

EN Swift prueba esto,

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

1

Para obtener la URL actual de WKWebView y UIWebview

Aquí está el código.

if (self.wkWebView) {
   NSString  *URL = self.wkWebView.title;
}else if(self.uiWebView) {
   NSString *URL = self.uiWebView.request.title;
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.