使用Webkit,如何使页面脱机? Obj-C,可可

时间:2012-10-12 19:04:55

标签: objective-c cocoa webkit

好的。所以我有一个从Wikipedia.org/WolframAlpha.com加载网页的应用程序。我想添加一个下载页面以供离线使用的按钮。我将如何使用Webkit进行此操作?我不相信我想要纯粹的缓存,因为我希望页面始终可用,直到用户删除它(我想我需要下载到硬盘驱动器或其他东西)。

我对Webkit不是很熟悉,所以任何帮助都会受到赞赏。目前我只有:

- (IBAction)downloadWebpage:(id)sender {
    //Download Webpage
}

我的webView定义为*webView。感谢。

2 个答案:

答案 0 :(得分:0)

您可以将NSURLRequest与NSURLConnection一起使用以获取URL的数据,并将其本地保存在文件中。 UIWebView有一些方法可供使用,例如 - loadData:MIMEType:textEncodingName:baseURL:,它允许您在Web视图上呈现本地数据。

一些相关文档:NSURLRequestUIWebviewNSURLConnection

答案 1 :(得分:0)

对不起,我有点晚了。

WebKit内置了它。正确的做法是使用WebArchive。 有关详细信息,请参阅WebArchive的-data方法。

以下代码未经过测试,但应说明您需要了解的内容。

WebFrame      *webFrame = [webView mainFrame];
WebDataSource *dataSource = [webFrame dataSource];
WebArchive    *webArchive = [dataSource webArchive];
NSString      *filename = @"MyTestArchive.webarchive";
NSString      *path = @"~/MyArchives";
NSString      *pathname = [path stringByAppendingPathComponent:filename];
NSError       *error = NULL;

pathname = [pathname stringByExpandingTildeInPath];
[[webArchive data] writeToFile:pathname options:NSAtomicWrite error:&error];

你也可以这样获得webArchive:

NSString   *urlString = @"http://www.example.com/";
NSURL      *url = [NSURL URLWithString:urlString];
WebArchive *webArchive = [[WebArchive alloc] initWithContentsOfURL:url];

[webArchive autorelease];

... (save [webArchive data] like above)

要获取文件名,您可以尝试询问NSURL ...

url = [[dataSource response] URL];
filename = [[url relativePath] lastPathComponent];
if(0 == [filename length] || [filename isEqualToString:@"/"])
{
    // try getting a name that makes sense. If you have a dataSource, try this...
    filename = [dataSource pageTitle];
    if(0 == [filename length])
    {
        filename = @"index";
    }
}
filename = [filename stringByAppendingPathExtension:@"webarchive"];

如果要加载webArchive,可以使用WebFrame的-loadArchive:方法。