A segunda pergunta é realmente mais fácil de responder. Veja o stringWithContentsOfURL:encoding:error:
método NSString - ele permite que você transmita um URL como uma instância do NSURL (que pode ser facilmente instanciada pelo NSString) e retorna uma string com o conteúdo completo da página nesse URL. Por exemplo:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Após a execução desse código, googlePage
o HTML error
será www.google.com e os erros encontrados na busca. (Você deve verificar o conteúdo error
após a busca.)
Indo para o outro lado (a partir de um UIWebView) é um pouco mais complicado, mas é basicamente o mesmo conceito. Você precisará extrair a solicitação da visualização e fazer a busca como antes:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDIT: No entanto, esses dois métodos sofrem um impacto no desempenho, pois fazem a solicitação duas vezes. Você pode contornar isso capturando o conteúdo de um UIWebView carregado no momento usando seu stringByEvaluatingJavascriptFromString:
método, como:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Isso irá capturar o conteúdo HTML atual da visualização usando o Document Object Model, analisar o JavaScript e fornecer a você como um NSString * de HTML.
Outra maneira é fazer sua solicitação programaticamente primeiro e carregar o UIWebView a partir do que você solicitou. Digamos que você pegue o segundo exemplo acima, onde está NSString *page
o resultado de uma chamada para stringWithContentsOfURL:encoding:error:
. Em seguida, você pode enviar essa sequência para a visualização da Web usando loadHTMLString:baseURL:
, assumindo que você também tenha mantido o NSURL solicitado:
[yourWebView loadHTMLString:page baseURL:requestURL];
No entanto, não tenho certeza se isso executará o JavaScript encontrado na página que você carrega (o nome do método loadHTMLString
, é um tanto ambíguo e os documentos não dizem muito sobre isso).
Para mais informações: