1

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

我对 Webkit 不是很熟悉,所以任何帮助都将不胜感激。目前我只有:

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

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

4

2 回答 2

0

您可以使用 NSURLRequest 和 NSURLConnection 来获取 URL 的数据,并将其保存在本地文件中。UIWebView 有一些你可以使用的方法,例如 – loadData:MIMEType:textEncodingName:baseURL:,它可以让你在 web view 上渲染本地数据。

一些相关文档:NSURLRequestUIWebviewNSURLConnection

于 2012-10-12T19:09:53.403 回答
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: 方法。

于 2014-11-21T02:27:24.090 回答