Ios UIWebView-加载自定义内容类型的url
在我的应用程序中,我使用一个web视图(一个简单的UIWebView)来显示一个列出一些文件的网页。 出于某种原因,服务器(不在我的控制范围内)想要强制用户下载文件,据我所知,它通过两种方式来实现—(a)设置内容配置:附件;在标题中,以及(b)将内容类型更改为内容类型:application/x-forcedownload 当尝试在web视图中打开其中一个文件时,web视图将显示已知的“帧加载中断”错误,如果在手机的本机Safari应用程序中访问同一页面并单击其中一个文件,它将显示另一个错误,即“下载失败-Safari无法下载此文件” 在我看来,这些错误的原因是内容类型发生了更改,尽管该文件是一个常规的、简单的PDF文件 因此,如果我能告诉我的web视图正确的内容类型(甚至忽略它,因为文件的扩展名是.pdf),我相信它会很高兴地显示文件 你知道怎样才能做到吗 非常感谢Ios UIWebView-加载自定义内容类型的url,ios,uiwebview,Ios,Uiwebview,在我的应用程序中,我使用一个web视图(一个简单的UIWebView)来显示一个列出一些文件的网页。 出于某种原因,服务器(不在我的控制范围内)想要强制用户下载文件,据我所知,它通过两种方式来实现—(a)设置内容配置:附件;在标题中,以及(b)将内容类型更改为内容类型:application/x-forcedownload 当尝试在web视图中打开其中一个文件时,web视图将显示已知的“帧加载中断”错误,如果在手机的本机Safari应用程序中访问同一页面并单击其中一个文件,它将显示另一个错误,即
Dan。最终,我使用UIWebViewDelegate识别对此类文件的请求,在后台下载文件内容,并使用
[webView loadData:self.webdata MIMEType:@“application/pdf”textEncodingName:@“UTF-8”baseURL:nil]显示它。
这是执行此任务的代码(self.webdata是类的NSMutableData属性)
- (BOOL)webView:(UIWebView *)_webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
// If the link is about to use a weird Content-Type, stop the UIWebView request
// and get the data through a NSUrlConnection
if ([request.URL.absoluteString hasSuffix:@"forcedownload=1"])
{
[NSURLConnection connectionWithRequest:request delegate:self];
// Show an activity indicator
[self showActivityIndicators];
return NO;
}
return [super webView:_webView shouldStartLoadWithRequest:request navigationType:navigationType];
}
- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
self.webdata = [[NSMutableData alloc] init];
}
- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
[self.webdata appendData:data];
}
- (void) connectionDidFinishLoading:(NSURLConnection *)connection{
[self hideActivityIndicators];
// Loads an empty URL to give the user the "Back" button ability
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]];
// Load the content
[webView loadData:self.webdata MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];
}