我正在构建一个 mac 应用程序,并希望能够包括使用标准下载系统浏览网页和从站点下载文件的功能,就像您在使用 safari 时看到的那样。
当我在应用程序中单击指向 .zip 或 .nzb 的链接时,它什么也没做!有没有办法从应用程序中允许这样做?
在此先感谢您的帮助:)
最佳答案
Safari 中的下载管理器是由 Safari 而不是 WebKit 实现的,因此您不会“免费”获得该功能,只能获得构建它的工具。
为了能够下载文件,您需要分配一个对象作为 WebView
的 WebPolicyDelegate
并实现 webView:decidePolicyForMIMEType:request: frame:decisionListener:
委托(delegate)方法。
在该方法中,您必须对作为 decisionlistener
参数传递给方法的对象调用 WebPolicyDecisionListener
协议(protocol)方法之一。三种WebPolicyDecisionListener
协议(protocol)方法是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
的下载委托(delegate)。此对象将发送所有 NSURLDownloadDelegate
协议(protocol)消息以及 WebDownload
委托(delegate)消息。您可以使用这些消息来选择文件的下载位置,以及实现类似 Safari 的下载管理器 UI。
关于objective-c - 如何允许使用 Mac 应用程序上的标准下载系统从 WebView 下载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9095245/