Die zweite Frage ist tatsächlich leichter zu beantworten. Schauen Sie sich die stringWithContentsOfURL:encoding:error:
Methode von NSString an - Sie können eine URL als Instanz von NSURL übergeben (die leicht über NSString instanziiert werden kann) und eine Zeichenfolge mit dem vollständigen Inhalt der Seite unter dieser URL zurückgeben. Beispielsweise:
NSString *googleString = @"http://www.google.com";
NSURL *googleURL = [NSURL URLWithString:googleString];
NSError *error;
NSString *googlePage = [NSString stringWithContentsOfURL:googleURL
encoding:NSASCIIStringEncoding
error:&error];
googlePage
Enthält nach dem Ausführen dieses Codes den HTML- Code für www.google.com sowie error
alle beim Abrufen aufgetretenen Fehler. (Sie sollten den Inhalt error
nach dem Abrufen überprüfen .)
Der andere Weg (von einer UIWebView aus) ist etwas schwieriger, aber im Grunde das gleiche Konzept. Sie müssen die Anforderung aus der Ansicht abrufen und dann wie zuvor abrufen:
NSURL *requestURL = [[yourWebView request] URL];
NSError *error;
NSString *page = [NSString stringWithContentsOfURL:requestURL
encoding:NSASCIIStringEncoding
error:&error];
BEARBEITEN: Beide Methoden haben jedoch einen Leistungseinbruch, da sie die Anforderung zweimal ausführen. Sie können dies umgehen, indem Sie den Inhalt aus einer aktuell geladenen UIWebView mithilfe der folgenden stringByEvaluatingJavascriptFromString:
Methode abrufen :
NSString *html = [yourWebView stringByEvaluatingJavaScriptFromString:
@"document.body.innerHTML"];
Dadurch wird der aktuelle HTML-Inhalt der Ansicht mithilfe des Dokumentobjektmodells abgerufen, das JavaScript analysiert und als NSString * von HTML angezeigt.
Eine andere Möglichkeit besteht darin, Ihre Anfrage zuerst programmgesteuert zu bearbeiten und dann die UIWebView von der von Ihnen angeforderten zu laden. Nehmen wir an, Sie nehmen das zweite Beispiel oben, in dem Sie NSString *page
als Ergebnis eines Anrufs bei haben stringWithContentsOfURL:encoding:error:
. Sie können diese Zeichenfolge dann mithilfe loadHTMLString:baseURL:
von in die Webansicht verschieben, vorausgesetzt, Sie haben auch an der von Ihnen angeforderten NSURL festgehalten:
[yourWebView loadHTMLString:page baseURL:requestURL];
Ich bin mir jedoch nicht sicher, ob hier JavaScript ausgeführt wird, das auf der von Ihnen geladenen Seite gefunden wurde (der Methodenname loadHTMLString
ist etwas mehrdeutig, und die Dokumente sagen nicht viel darüber aus).
Für mehr Information:
NSString *html = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.outerHTML"];
war schon mehrmals ein Lebensretter für mich. Es scheint so weit wie möglich aus dem Dokument zurückzukehren.Wenn Sie den Inhalt einer bereits geladenen UIWebView extrahieren möchten, verwenden Sie -stringByEvaluatingJavaScriptFromString. Beispielsweise:
quelle
So erhalten Sie die gesamten HTML-Rohdaten (mit
<head>
und<body>
):quelle
Beachten Sie, dass der NSString stringWithContentsOfURL eine völlig andere Benutzeragentenzeichenfolge meldet als der UIWebView, der dieselbe Anforderung stellt. Wenn Ihr Server also User-Agent-fähig ist und je nachdem, wer danach fragt, unterschiedliche HTML-Dateien zurücksendet, erhalten Sie auf diese Weise möglicherweise keine korrekten Ergebnisse.
Beachten Sie auch, dass
@"document.body.innerHTML"
oben nur das angezeigt wird, was sich im Body-Tag befindet. Wenn Sie verwenden, erhalten@"document.all[0].innerHTML"
Sie sowohl Kopf als auch Körper. Dies ist immer noch nicht der vollständige Inhalt von UIWebView, da die Tags! Doctype oder html nicht zurückgegeben werden, aber es ist viel näher.quelle
Lesen:-
Ändern:-
quelle
In Swift v3:
quelle
(Xcode 5 iOS 7) Universal App-Beispiel für iOS 7 und Xcode 5. Hierbei handelt es sich um ein Open Source-Projekt / Beispiel: Link zu SimpleWebView (Beispiel für Projekt-Zip und Quellcode)
quelle
Ich benutze eine schnelle Erweiterung wie diese:
quelle
Sie sollten dies versuchen:
quelle
UIWebView
Holen Sie sich HTML von UIWebView`
Setzen Sie HTML in UIWebView
[HTML von WKWebView abrufen / festlegen]
quelle