Die zweite Frage ist eigentlich einfacher zu beantworten. Sehen Sie sich die stringWithContentsOfURL:encoding:error:
-Methode von NSString an - Sie können eine URL als Instanz von NSURL (die einfach aus NSString erstellt werden kann) übergeben und eine Zeichenfolge mit dem vollständigen Inhalt der Seite an diese URL zurückgeben. Zum Beispiel:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
Nach diesem Code ausgeführt wird, googlePage
wird das HTML für www.google.com enthalten und error
wird alle Fehler in dem Abruf angetroffen enthalten. (Sie sollten den Inhalt von error
nach dem Abruf überprüfen.)
Gehen Sie den anderen Weg (von einem UIWebView) ist ein bisschen schwieriger, aber ist im Grunde das gleiche Konzept. Sie verlassen nun die request aus der Sicht ziehen müssen, dann tun die Abruf- wie zuvor:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
EDIT: Beide Methoden nehmen eine Leistung getroffen, jedoch, da sie die Anfrage zweimal tun. Sie können durch Greifen des Inhalts von einem aktuell geladenen UIWebView mit seiner stringByEvaluatingJavascriptFromString:
Methode als solche dieses Problem umgehen:
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Dadurch wird den aktuellen HTML-Inhalt der Ansicht mit dem Document Object Model, analysieren die JavaScript packen, dann geben Sie es als NSString * von HTML.
Eine andere Möglichkeit besteht darin, Ihre Anfrage zuerst programmgesteuert auszuführen und dann das UIWebView von dem, was Sie angefordert haben, zu laden. Nehmen wir an, Sie nehmen das zweite Beispiel oben, wo Sie NSString *page
als Ergebnis eines Anrufs zu stringWithContentsOfURL:encoding:error:
haben. Anschließend können Sie diese Zeichenfolge in die Web-Ansicht drücken loadHTMLString:baseURL:
verwenden, vorausgesetzt, Sie auch auf die NSURL gehalten auf Sie angefordert:
[yourWebView loadHTMLString:page baseURL:requestURL];
Ich bin nicht sicher, aber wenn dies JavaScript in der Seite laufen Sie laden (Der Methodenname, loadHTMLString
, ist etwas mehrdeutig, und die Dokumente sagen nicht viel darüber).
Für weitere Informationen:
Awesome! Danke für die tolle Antwort. Ich vermute, dass beide Methoden dazu führen, dass die Seite zweimal geladen wird, was sich auf die Leistung auswirken kann. Gibt es eine Möglichkeit, das zu vermeiden? –
In der Tat gibt es :) Bearbeitete Antwort. – Tim
Ja, [yourWebView loadHTMLString: page baseURL: requestURL]; wird das Javascript auf der Seite ausführen. Ich habe diese API mit Google Maps verwendet. – jeff7091