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:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
foi um salva-vidas para mim várias vezes agora. Parece retornar do documento o máximo possível.se você deseja extrair o conteúdo de um UIWebView já carregado, -stringByEvaluatingJavaScriptFromString. Por exemplo:
fonte
Para obter todos os dados brutos em HTML (com
<head>
e<body>
):fonte
Observe que a stringStringWithContentsOfURL do NSString relatará uma string de agente do usuário totalmente diferente da UIWebView que faz a mesma solicitação. Portanto, se seu servidor estiver ciente do agente do usuário e enviando de volta um html diferente, dependendo de quem está solicitando, talvez você não obtenha resultados corretos dessa maneira.
Observe também que o
@"document.body.innerHTML"
mencionado acima exibirá apenas o que está na etiqueta do corpo. Se você usar,@"document.all[0].innerHTML"
terá cabeça e corpo. Ainda não é o conteúdo completo do UIWebView, pois não receberá as tags! Doctype ou html, mas está muito mais próximo.fonte
Ler:-
Para modificar:-
fonte
No Swift v3:
fonte
(Xcode 5 iOS 7) Exemplo de aplicativo universal para iOS 7 e Xcode 5. É um projeto / exemplo de código aberto localizado aqui: Link para SimpleWebView (exemplo de CEP do projeto e código-fonte)
fonte
Eu uso uma extensão rápida como esta:
fonte
você deve tentar o seguinte:
fonte
UIWebView
obter HTML do UIWebView`
definir HTML em UIWebView
[obter / definir HTML do WKWebView]
fonte