2008-10-22 3 views
7

아이폰에서 프로그래밍 방식으로 .webarchive를 열 수 있는지 아는 사람 있습니까? .webarchive는 사파리가 웹 페이지를 패키징하는 방법이며 리소스를 하나의 파일로 묶었습니다. 내가 가지이 제 3 자 응용 프로그램없이 할 수있는 기대했다 :아이폰에서 .webarchive 열기?

주 ....

나는 하나를 생성하고 모바일 사파리에서 일에 대한 링크를 탐색했지만, 그것은 작동하지 않았다 제 3 자 툴을 필요로하지 않고 아이폰에서 사용할 웹 애플리케이션을 패키징하는 좋은 방법 일 것입니다.

답변

16

iOS에서 webarchive가 지원됩니다. 그냥 UIWebView에로드하십시오. 그것은 단지 작동합니다! 번들에 webarchive을로드하기위한

, 단지

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

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

웹뷰을하면 그냥, 다음 코드는 수도 HTML을 잡고 싶다면, 위의 제안에 조금 확장하여있는 UIWebView

+1

를위한 HTML + 자바 스크립트를 패키징 할 수있는 좋은 방법이 될 것으로는, 타사 응용 프로그램없이 할 수 바라고 항상 그런 것은 아니었다 . 이 버전을 지원하는 iOS 버전을 알고 계십니까? – Jim

+1

내가 아는 한 iOS 2.0 – SpaceDog

+0

그것은 나를 위해 작동하지 않습니다 - 나는 하얀 uiwebview를 얻고 있습니다. (iOS 5.0.1) –

0

iPhone에서 AirSharing을 실행하면 webarchive 파일이 열리지 만 완전히 자체적으로 수행하는지 기본 웹 아카이브 지원을 사용하는지는 알 수 없습니다.

는 .webarchive 그냥 PLIST입니다 http://www.avatron.com/products/

+0

참고 : 나는 종류의 그것이 웹 애플리케이션 –

4

를 참조하십시오; 이론적으로는 NSPropertyListSerialization을 사용하여이 파일을 읽고 전화기에 로컬 파일 구조를 만든 다음 UIWebView로 그 파일을 보낼 수 있습니다. 또는 AirSharing을 사용하십시오.

3

입니다 좋은 출발점이되어야합니다. 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"; 

}