gpt4 book ai didi

ios - UIWebView - 使用自定义内容类型加载 url

转载 作者:行者123 更新时间:2023-11-29 10:49:34 25 4
gpt4 key购买 nike

在我的应用程序中,我使用 WebView (一个简单的 UIWebView)来显示列出一些文件的网页。出于某种原因,服务器(不在我的控制范围内)想要强制用户下载文件,据我所知,它以两种方式进行 - (a) 设置 Content-Disposition: attachment;在 header 中,并且 (b) 将内容类型更改为 Content-Type: application/x-forcedownload。

当尝试在 WebView 中打开其中一个文件时, WebView 将显示已知的“框架加载中断”错误,如果在手机的 native Safari 应用程序中访问同一页面并单击其中一个文件,它将显示不同的错误消息“下载失败 - Safari 无法下载此文件”。

在我看来,这些错误的原因是内容类型已更改,尽管该文件是一个普通的、简单的 PDF 文件。

因此,如果我能告诉我的 Web View 正确的内容类型(或者甚至忽略它,因为文件的扩展名为 .pdf),我相信它会很高兴地显示该文件。

你知道怎么做到的吗?

非常感谢,

丹.

最佳答案

最终,我使用 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];
}

关于ios - UIWebView - 使用自定义内容类型加载 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com