2008-10-22 226 views
7

有誰知道你是否可以在iPhone上以編程方式打開.webarchive? .webarchive是Safari打包網頁的方式,它將相關資源合併到單個文件中。在iphone上打開.webarchive?

我試圖創建一個和瀏覽的鏈接,一個在移動Safari瀏覽器,但它沒有工作....

注:我是那種希望這能不經第三方應用程序來完成,因爲這將是一個很好的方式來打包Web應用程序而不需要第三方工具。

回答

16

iOS支持webarchive。只需將其加載到UIWebView。它只是工作!

裝載在你的包一webarchive,只是做

NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"myFile" 
    withExtension:@"webarchive"]; 

[webView loadRequest:[NSURLRequest requestWithURL:fileURL]]; 

的WebView是你的UIWebView

+1

一個很好的方式,這並非總是如此。你知道哪個版本的iOS增加了對此的支持嗎? – Jim 2011-07-06 15:58:07

0

iPhone上的AirSharing會打開webarchive文件,但我不知道他們是自己做的還是使用本地webarchive支持。

http://www.avatron.com/products/

+0

注:我有種希望它可以在沒有第三方應用程序來完成,因爲它會是打包的HTML + JavaScript進行一個Web應用 – 2008-10-22 19:08:24

4

一個.webarchive只是一個plist中;從理論上講,你可以使用NSPropertyListSerialization來讀取它,然後在手機上建立一個本地文件結構,然後將其抽成一個UIWebView。或使用AirSharing。

3

擴大一點就以上這些建議,如果你只是想抓住的HTML,下面的代碼片段可能是一個很好的起點。通過檢查webMainResource字典,您還可以提取其他材料,例如圖像。

#define WEB_ARCHIVE @"Apple Web Archive pasteboard type" 

- (NSString*) htmlStringFromPasteboard; 
{ 
    NSData* archiveData = [[UIPasteboard generalPasteboard] valueForPasteboardType:WEB_ARCHIVE]; 

    if (archiveData) 
    { 
     NSError* error = nil; 
     id webArchive = [NSPropertyListSerialization propertyListWithData:archiveData options:NSPropertyListImmutable format:NULL error:&error]; 

     if (error) 
     { 
      return [NSString stringWithFormat:@"Error: '%@'", [error localizedDescription]]; 
     } 
     NSDictionary* webMainResource = [webArchive objectForKey:@"WebMainResource"]; 
     NSData * webResourceData = [webMainResource objectForKey:@"WebResourceData"]; 

     NSString* string = [[NSString alloc] initWithData:webResourceData encoding:NSUTF8StringEncoding]; 

     return [string autorelease]; 
    } 

    return @"No WebArchive data on the pasteboard just now"; 

}