gpt4 book ai didi

objective-c - UIWebView 委托(delegate)获取 MIME 类型

转载 作者:太空狗 更新时间:2023-10-30 03:54:46 25 4
gpt4 key购买 nike

UIWebView 不自动支持处理 Passbook .pkpass 文件。

在此technical note ,Apple 建议通过 UIWebViewDelegate 方法执行检查以嗅探出 MIME 类型并相应地处理它。

To add passes using a UIWebView, implement the appropriate UIWebViewDelegate methods to identify when the view loads data with a MIME type of application/vnd.apple.pkpass

但是,我在 UIWebView Delegate Protocol Reference 中找不到任何内容。能够提供 MIME 类型。

我可以直接使用 NSURLConnection 委托(delegate)成功下载和处理文件,但我希望实现的是,如果用户在在 UIWebView 中浏览。由于我不知道该链接,而且许多提供商没有在其链接后缀 .pkpass 扩展名,因此遵循 Apple 检查 MIME 类型的建议似乎是最好的方法。

我尝试添加以下内容

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)newRequest 
navigationType:(UIWebViewNavigationType)navigationType
{

NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:[newRequest URL]];

// Spoof iOS Safari headers for sites that sniff the User Agent
[req addValue:@"Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5376e Safari/8536.25" forHTTPHeaderField:@"User-Agent"];

NSURLConnection *conn = [NSURLConnection connectionWithRequest:newRequest delegate:self];

return YES;
}

我的 NSURLConnection 委托(delegate):

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSString *mime = [response MIMEType];

if ([mime isEqualToString:@"application/vnd.apple.pkpass"] && ![_data length]) {

_data = nil; // clear any old data
_data = [[NSMutableData alloc] init];

[_webPanel stopLoading];
}
}

-(void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data
{
[_data appendData:data];
NSLog(@"Size: %d", [_data length]);
}

-(void)connectionDidFinishLoading:(NSURLConnection*)connection
{

if ([_data length]) {

PKAddPassesViewController *pkvc = [PassKitAPI presentPKPassFileFromData:_data];
pkvc.delegate = self;
[self presentViewController:pkvc
animated:YES
completion:nil];
}
}

在没有 UIWebView 的情况下直接调用连接时,NSURLConnection 委托(delegate)可以正常工作。但是,当我尝试从 UIWebView 委托(delegate)启动 NSURLConnection 时,通行证下载失败,因为只有 80% 左右的 .pkpass 正在下载(我得到随机不匹配_data 变量和 Content-Length header 中的字节数)。

所以,我的问题:

  1. 是否有更简单的方法直接从 UIWebView 委托(delegate)方法获取 MIME 类型?
  2. 如果不是,那么我是通过打开一个并行的 NSURLConnection 来解决这个问题,还是有更好的方法?
  3. 如果 NSURLConnection 是要走的路,那么是什么导致它无法下载完整文件?

最佳答案

就用js吧

let contentType = webView.stringByEvaluatingJavaScript(from: "document.contentType;")

关于objective-c - UIWebView 委托(delegate)获取 MIME 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16257275/

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