La seconda domanda è in realtà più facile a cui rispondere. Guarda il stringWithContentsOfURL:encoding:error:
metodo di NSString: ti consente di passare un URL come istanza di NSURL (che può essere facilmente istanziato da NSString) e restituisce una stringa con il contenuto completo della pagina in quell'URL. Per esempio:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Dopo aver eseguito questo codice, googlePage
conterrà l'HTML per www.google.com e error
conterrà eventuali errori riscontrati nel recupero. (Dovresti controllare il contenuto di error
dopo il recupero.)
Andare dall'altra parte (da un UIWebView) è un po 'più complicato, ma fondamentalmente è lo stesso concetto. Dovrai estrarre la richiesta dalla vista, quindi eseguire il recupero come prima:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
MODIFICA: Entrambi questi metodi subiscono un impatto sulle prestazioni, tuttavia, poiché fanno la richiesta due volte. Puoi aggirare questo problema afferrando il contenuto da un UIWebView attualmente caricato usando il suo stringByEvaluatingJavascriptFromString:
metodo, come tale:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Ciò afferrerà il contenuto HTML corrente della vista utilizzando il Document Object Model, analizzerà JavaScript, quindi glielo fornirà come NSString * di HTML.
Un altro modo è fare prima la tua richiesta a livello di codice, quindi caricare UIWebView da quello che hai richiesto. Diciamo che prendi il secondo esempio sopra, dove hai NSString *page
come risultato di una chiamata a stringWithContentsOfURL:encoding:error:
. È quindi possibile inserire quella stringa nella visualizzazione Web utilizzando loadHTMLString:baseURL:
, supponendo che si sia mantenuto anche nel NSURL richiesto:
[yourWebView loadHTMLString:page baseURL:requestURL];
Non sono sicuro, tuttavia, se questo eseguirà JavaScript trovato nella pagina caricata (il nome del metodo loadHTMLString
, è alquanto ambiguo e i documenti non ne parlano molto).
Per maggiori informazioni: