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:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
ha sido un salvavidas para mí varias veces ahora. Parece regresar del documento tanto como sea posible.si desea extraer el contenido de un UIWebView ya cargado, -stringByEvaluatingJavaScriptFromString. Por ejemplo:
fuente
Para obtener todos los datos sin formato HTML (con
<head>
y<body>
):fuente
Tenga en cuenta que NSString stringWithContentsOfURL informará una cadena de agente de usuario totalmente diferente a la UIWebView que realiza la misma solicitud. Por lo tanto, si su servidor tiene conocimiento del agente de usuario y envía de vuelta diferentes html dependiendo de quién lo solicite, es posible que no obtenga los resultados correctos de esta manera.
También tenga en cuenta que lo
@"document.body.innerHTML"
mencionado anteriormente solo mostrará lo que está en la etiqueta del cuerpo. Si lo@"document.all[0].innerHTML"
usas obtendrás cabeza y cuerpo. Que todavía no es el contenido completo de UIWebView, ya que no recuperará las etiquetas! Doctype o html, pero está mucho más cerca.fuente
Leer:-
Modificar:-
fuente
En Swift v3:
fuente
(Xcode 5 iOS 7) Ejemplo de aplicación universal para iOS 7 y Xcode 5. Es un proyecto / ejemplo de código abierto ubicado aquí: Enlace a SimpleWebView (Proyecto Zip y ejemplo de código fuente)
fuente
Yo uso una extensión rápida como esta:
fuente
deberías probar esto:
fuente
UIWebView
obtener HTML de UIWebView`
establecer HTML en UIWebView
[obtener / establecer HTML desde WKWebView]
fuente