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.