No siempre es posible utilizar el parser de XML provisto por el framework para archivos HTML. El HTML, que en teoría es un XML, puede estar bien formado, o puede contener construcciones sin mucho sentido, que los browsers han cometido el error de interpretar, en lugar de castigar al programador por sacrilego. Pero por suerte, al menos JavaScript sigue funcionando con HTMLs mal formados.
La clase UIWebView para visualizar páginas HTML permite cargar una página a partir de un string y además permite ejecutar código JavaScript con un método ejecutado directamente sobre el objeto. Así que la estrategia a utilizar es, cargar el string que representa la página. Lo vamos a alterar para injectar jQuery.
El tag HEAD puede estar en cualquier lado, y puede haber espacios de por medio, así que lo más seguro
sería reemplazar el tag, por el tag más el código para cargar jQuery, luego cargamos el WebView con el html modificado. (en este punto podríamos remover las imágenes para que no se carguen y acelerar la carga)
NSURL *url = [[NSURL alloc] initWithString: @"yourURL"]; NSUIWebView *webView = [[NSUIWebView alloc] init]; WebDelegate *webDelegate = [[WebDelegate alloc] init]; /*Cargamos el string desde internet.*/ NSMutableString *html = [[NSMutableString alloc] initWithContentsOfURL:url]; //Modificamos el html ha nuestro gusto. Sería mejor una copia local de jQuery. [html replaceOccurrencesOfString:@"<head>" withString:@"<head><script src=\"http://code.jquery.com/jquery-latest.js\" type=\"text/javascript\"></script>" options:NSCaseInsensitiveSearch range:NSMakeRange(0, 100)]; [webView setDelegate:webDelegate]; [webView loadHTMLString:html baseURL:url];
Luego, modificamos el código del método delegado que es ejecutado cuando termina de cargar la página.
- (void) webViewDidFinishLoad:(UIWebView *)webView {
NSString *ret = [webView stringByEvaluatingJavaScriptFromString:@"$('title').text()"];
NSLog(@"%@", ret);
}
Y así podemos utilizar para jQuery para parsear una página, devolver un formato que sea más facil de parsear del lado de Objective-C.
Recordar que el script solo puede usar hasta 10 Mbs de memoria y solo puede ejecutar durante 10 segundos. Si hay errores en el código JavaScript, no se puede ver claramente, así que recomiendo probarlo directamente en un browser y luego utilizarlo en el WebView.
