2011-01-14 12 views
0

Ich versuche, ein WebArchiv von einem WebView zu erstellen. Ich habe es funktioniert, aber ich habe ein Problem gefunden, wenn ich versuche, mit bearbeitetem Inhalt zu arbeiten. Das ist, was ich derzeit tue:Wie speichern Sie in WebArchive webView editierbare Inhalte?

[webView setEditable:YES]; 
WebDataSource *dataSource = [[webView mainFrame] dataSource]; 

WebArchive *archive = [[WebArchive alloc] 
     initWithMainResource:[dataSource mainResource] 
     subresources:nil 
     subframeArchives:nil]; 

[[archive data] writeToFile:destinationPath atomically:YES]; 
[[webView mainFrame] 
loadRequest:[NSURLRequest 
    requestWithURL: 
    [NSURL fileURLWithPath:destinationPath] 
    ]]; 

Alle Änderungen ich auf den Inhalt in der WebView mache nicht in der WebArchive gespeichert bekommen. Muss ich meine Änderungen in die Originaldatei übernehmen, damit dies funktioniert? Ich möchte es basierend auf dem Inhalt, der in der WebView ist, speichern. Jede Hilfe wäre willkommen. Vielen Dank!

+0

Das ist, was ich mache und funktioniert hier OK (d. H. WriteToFile: atomically :). Ich denke, es ist etwas falsch, den Inhalt von webarchive wieder in das Webview zu laden. Können Sie überprüfen, ob die Datei, die Sie in Zielpfad geschrieben haben, die gewünschte ist, d. H. Die bearbeitete Datei? –

+0

Ich lade tatsächlich eine HTML-Datei (input.html) in das WebView und versuche dann, diese in einem WebArchiv (output.webarchive) zu speichern. Das Speichern funktioniert, aber es scheint das WebArchiv aus der ursprünglichen Datei zu erstellen und ignoriert die vorgenommenen Änderungen. Wenn ich Änderungen sage, meine ich, dass ich nach dem Setzen von [webView setEditable: YES] und anschließendem Löschen oder Hinzufügen von Text den WebArchivspeicher speichere und keine meiner Änderungen in die Ausgabe übergehen. Ist das, was du sagst, arbeitest du? – David

+0

[dataSource mainResource] gibt "Eine Webressource zurück, die die Datenquelle darstellt. Der zurückgegebene Inhalt basiert auf den ursprünglichen heruntergeladenen Daten. Sie können den zurückgegebenen Wert verwenden, um ein WebArchive-Objekt anstelle der webArchive-Methode zu erstellen." Laut Apple Reference Library (hhttp: //developer.apple.com/library/mac/documentation/cocoa/Reference/WebKit/Classes/WebDataSource_Class/Reference/Reference.html). An dieser Stelle glaube ich, dass ich eine Möglichkeit brauche, das Quell-DOM aus dem WebView zu holen, dann eine WebDataSource und dann ein WebArchiv zu erstellen. Irgendwelche Gedanken darüber, wie man das macht? – David

Antwort

0

Nachdem ich eine Weile gegraben hatte, konnte ich die Antwort auf meine Frage herausfinden. Hier ist, wie ich es gemacht habe:

WebResource *dataSource = [[[[webView mainFrame] DOMDocument] webArchive] mainResource]; 

WebArchive *archive = [[WebArchive alloc] 
     initWithMainResource:dataSource 
     subresources:nil 
     subframeArchives:nil]; 

[[archive data] writeToFile:@"output.webarchive" atomically:YES]; 

Hoffe, dass jemand hilft.

Verwandte Themen