2013-10-24 30 views
8

是否有我可以使用iOS中下载一个完整的网页,包括CSS,JavaScript和图像文件等的ASIHTTPRequest库ASIWebPageRequest替代?我似乎无法在AFNetworking框架中找到类似的类,到目前为止,我的搜索还没有成功。我无法使用ASIHTTPRequest,因为我似乎根本无法在任何应用程序中使用ASIHTTPRequest,我没有找到适用于iOS7的示例,我宁愿使用更近的东西。下载iOS中整个网页,不许使用ASIHTTPRequest

我基本上要在本地存储整个网页在iPhone/iPad的一个目录中,以便用户能够然后在本地编辑,并稍后发送整个目录到他们的网络服务器。用户还需要能够随时在UIWebView中查看网页。

如果无法做到这一点我不得不刚才下载的HTML文件,然后分析它来寻找外部资源的URL,然后分别下载这些。我宁愿不这样做,但如果我必须那么完成这个最好的图书馆是什么?

感谢任何人帮助我!

+0

我发现了一个类似的问题: http://stackoverflow.com/问题/ 8388769/how-can-i-save-a-html-file-with-external-resources-using-afnetworking 希望这会有所帮助。 – Paradox

+0

由于iOS5 +支持缓存,因此不再需要此项目。但是,你无法做任何事情。发现这篇文章太:http://stackoverflow.com/questions/16826820/uiwebview-webpage-caching-for-offline-viewing我看了一下源,但我不知道如何实现我究竟是什么。当然,为此需要进行某种实施?! –

回答

2

看来你是像wget之后,但我不知道,如果你能做到这一点iOS中。

您可以使用本机方法NSString stringWithContentsOfURL:encoding:error:来抓取网页的HTML。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html#//apple_ref/occ/clm/NSString/stringWithContentsOfURL:encoding:error

+0

,它不会像css或图像那样获得外部资源文件AFAICS .. so -1,因为它没有帮助。 –

+0

也阻止线程,我认为所有阻塞的东西都不好。 (即使你在bg中做了它,但是它没有问题,所以不要阻止UI!) –

+0

@ Daij-Djan感谢您指出这一点。在他的问题结束时,OP询问了获取HTML文件的方法,这正是'stringWithContentsOfURL'所做的。 – Mina

1

我会使用一个UIWebView并缓存它使

+0

如果您可以提供一些适用的示例代码,那么奖金就是您的。 –

+0

对不起,没有它铺设了:/ –

1

您可以拦截所有通过定制NSURLProtocol从您的应用程序进行的HTTP请求的所有请求。你必须扩展这个概念,但是这里有一个简单的类,当你放到你的项目中时,会注销所有的请求(例如从UIWebView中)。

@interface TSHttpLoggingURLProtocol : NSURLProtocol 
@end 

@implementation TSHttpLoggingURLProtocol 

+ (void) load 
{ 
    [NSURLProtocol registerClass: self]; 
} 

+ (BOOL) canInitWithRequest: (NSURLRequest *) request 
{ 
    NSLog(@"%@", request.URL); 

    return NO; 
} 

@end 

你可以扩大这一点,实际执行从协议执行的要求(见https://github.com/rnapier/RNCachingURLProtocol更完整的例子)。或者你可以跟踪请求并在稍后自行下载。

有没有简单的方法,我知道像这样的协议处理程序与一个UIWebView的实例相关联。您将用此拦截应用程序中的所有请求。 (买者 - 在iOS7,协议可以注册到特定NSURLSessions;对于这些我认为一个全局注册协议处理程序不会拦截)