Менеджер загрузок в Safari реализован Safari, а не WebKit, поэтому вы не получаете эту функциональность «бесплатно», а только инструменты для ее создания.
Чтобы иметь возможность загружать файлы, необходимо назначить объект как WebPolicyDelegate
для WebView
и реализовать метод делегата webView:decidePolicyForMIMEType:request:frame:decisionListener:
.
В этом методе вы должны вызвать один из методов протокола WebPolicyDecisionListener
для объекта, который передается методу в качестве параметра decisionlistener
. Три метода протокола WebPolicyDecisionListener
: ignore
, use
или download
. Для любых типов MIME, которые вы хотите загрузить, вы должны вызвать download
для объекта, переданного в качестве параметра слушателя:
- (void)webView:(WebView *)webView
decidePolicyForMIMEType:(NSString *)type
request:(NSURLRequest *)request
frame:(WebFrame *)frame
decisionListener:(id < WebPolicyDecisionListener >)listener
{
if([type isEqualToString:@"application/zip"])
{
[listener download];
}
//just ignore all other types; the default behaviour will be used
}
Затем вам нужно назначить объект в качестве делегата загрузки вашего WebView
. Этот объект будет отправлять все сообщения протокола NSURLDownloadDelegate
, а также WebDownload
делегировать сообщения. Эти сообщения можно использовать для выбора места загрузки файла, а также для реализации пользовательского интерфейса менеджера загрузки, например Safari.