2013-10-24 7 views
8

Gibt es eine Alternative zu ASIWebPageRequest in der ASIHTTPRequest-Bibliothek, die ich zum Herunterladen einer gesamten Webseite in iOS einschließlich der CSS, JavaScript und Bilddateien usw. verwenden kann? Ich kann im AFNetworking Framework keine ähnliche Klasse finden und bisher waren meine Suchen nicht erfolgreich. Ich kann ASIHTTPRequest nicht verwenden, da ich es in keiner meiner Apps überhaupt zum Laufen bringen kann, keine Beispiele, die ich für iOS7 gefunden habe, und ich würde sowieso lieber etwas Neueres verwenden.Laden Sie die gesamte Webseite in iOS OHNE die Verwendung von ASIHTTPRequest

Ich möchte grundsätzlich eine gesamte Webseite lokal in einem Verzeichnis auf dem iPhone/iPad speichern, damit ein Benutzer sie lokal bearbeiten und später das gesamte Verzeichnis an ihren Webserver senden kann. Der Benutzer muss die Webseite auch jederzeit in einem UIWebView anzeigen können.

Wenn dies nicht möglich ist, muss ich nur die HTML-Datei herunterladen und dann analysieren, um die URLs von externen Ressourcen zu finden, und dann diese separat herunterladen. Ich würde das lieber nicht machen, aber wenn ich dann muss, was ist die beste Bibliothek, um das zu erreichen?

Danke an jeden, der mir hilft!

+0

ich eine ähnliche Frage gefunden: http://stackoverflow.com/ Fragen/8388769/how-can-ich-save-a-html-Datei-mit-externen-Ressourcen-Using-afnetworking Hoffe, dass dies hilft. – Paradox

+0

Dieses Projekt wird nicht mehr benötigt, da iOS5 + das Caching unterstützt. Sie können jedoch nichts damit machen. Habe diesen Beitrag auch gefunden: http://stackoverflow.com/questions/16826820/uiwebview-webpage-caching-for-offline-viewing Ich habe mir die Quelle angeschaut, aber ich bin mir nicht sicher, wie ich genau umsetzen soll, wonach ich suche . Sicherlich muss da draußen irgendeine Art von Implementierung stattfinden ?! –

Antwort

2

Es scheint, Sie sind nach etwas wie wget, aber ich bin mir nicht sicher, ob Sie das in iOS tun können.

Sie können die native Methode NSString stringWithContentsOfURL:encoding:error: verwenden, um den HTML-Code einer Webseite abzurufen.

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/clm/NSString/stringWithContentsOfURL:encoding:error:

+0

, die nicht externe Ressource-Dateien wie die CSS oder Bilder entweder AFAICS .. so -1 wie es nicht hilft. –

+0

blockiert es auch den Thread und ich denke alles, was blockiert ist schlecht. (Auch wenn du es in der bg machst blockiert es aber da ist es ok. Also blockiere die UI nicht!) –

+0

@ Daij-Djan Danke das du das zeigst.Am Ende seiner Frage fragt OP nach Methoden, um eine HTML-Datei zu erhalten, die genau das ist, was 'stringWithContentsOfURL' tut. – Mina

1

würde ich eine UIWebView verwenden und alle Anfragen zwischenzuspeichern

+0

Wenn Sie einen Beispielcode liefern können, der funktioniert, gehört Ihnen das Kopfgeld. –

+0

Entschuldigung, lass es nicht mehr rumliegen: / –

1

Sie macht aus Ihrer Anwendung über einen benutzerdefinierten NSURLProtocol gemacht alle HTTP-Anfragen abfangen. Sie müssen dieses Konzept erweitern, aber hier ist eine einfache Klasse, die, wenn sie in Ihr Projekt eingefügt wird, alle Anfragen abmeldet (z. B. von einem UIWebView).

@interface TSHttpLoggingURLProtocol : NSURLProtocol 
@end 

@implementation TSHttpLoggingURLProtocol 

+ (void) load 
{ 
    [NSURLProtocol registerClass: self]; 
} 

+ (BOOL) canInitWithRequest: (NSURLRequest *) request 
{ 
    NSLog(@"%@", request.URL); 

    return NO; 
} 

@end 

Sie auf diese erweitern konnte und tatsächlich die Anforderungen von der Protokoll-Implementierung durchführen (siehe https://github.com/rnapier/RNCachingURLProtocol für ein vollständigeres Beispiel). Oder Sie können die Anfragen einfach verfolgen und später selbst herunterladen.

Es gibt keine einfache Möglichkeit, einen solchen Protokoll-Handler mit einer bestimmten Instanz eines UIWebView zu verbinden. Sie werden damit ALLE Anfragen in der App abfangen. (. Caveat - in iOS7 können Protokolle auf bestimmte NSURLSessions registriert werden, denn diese denke ich, ein weltweit registrierten Protokollhandler nicht abfangen)

Verwandte Themen