La segunda pregunta es realmente más fácil de responder. Mire el stringWithContentsOfURL:encoding:error:
método de NSString: le permite pasar una URL como una instancia de NSURL (que se puede instanciar fácilmente desde NSString) y devuelve una cadena con el contenido completo de la página en esa URL. Por ejemplo:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Después de ejecutar este código, googlePage
contendrá el HTML para www.google.com y error
contendrá los errores encontrados en la búsqueda. (Debe verificar el contenido de error
después de la búsqueda).
Ir hacia el otro lado (desde un UIWebView) es un poco más complicado, pero es básicamente el mismo concepto. Tendrá que extraer la solicitud de la vista, luego realizar la búsqueda como antes:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDITAR: Sin embargo, ambos métodos tienen un impacto en el rendimiento, ya que hacen la solicitud dos veces. Puede solucionar esto agarrando el contenido de un UIWebView cargado actualmente utilizando su stringByEvaluatingJavascriptFromString:
método, como tal:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Esto tomará el contenido HTML actual de la vista usando el Modelo de Objeto del Documento, analizará el JavaScript y luego se lo dará como un NSString * de HTML.
Otra forma es hacer su solicitud mediante programación primero, luego cargue el UIWebView de lo que solicitó. Supongamos que toma el segundo ejemplo anterior, donde tiene NSString *page
como resultado una llamada a stringWithContentsOfURL:encoding:error:
. Luego puede insertar esa cadena en la vista web utilizando loadHTMLString:baseURL:
, suponiendo que también haya mantenido el NSURL que solicitó:
[yourWebView loadHTMLString:page baseURL:requestURL];
Sin embargo, no estoy seguro de si esto ejecutará JavaScript encontrado en la página que carga (el nombre del método loadHTMLString
es algo ambiguo y los documentos no dicen mucho al respecto).
Para más información: