objective-c - 如何允许使用 Mac 应用程序上的标准下载系统从 WebView 下载?

标签 objective-c macos cocoa osx-lion

我正在构建一个 mac 应用程序,并希望能够包括使用标准下载系统浏览网页和从站点下载文件的功能,就像您在使用 safari 时看到的那样。

当我在应用程序中单击指向 .zip 或 .nzb 的链接时,它什么也没做!有没有办法从应用程序中允许这样做?

在此先感谢您的帮助:)

最佳答案

Safari 中的下载管理器是由 Safari 而不是 WebKit 实现的,因此您不会“免费”获得该功能,只能获得构建它的工具。

为了能够下载文件,您需要分配一个对象作为 WebViewWebPolicyDelegate 并实现 webView:decidePolicyForMIMEType:request: frame:decisionListener: 委托(delegate)方法。

在该方法中,您必须对作为 decisionlistener 参数传递给方法的对象调用 WebPolicyDecisionListener 协议(protocol)方法之一。三种WebPolicyDecisionListener 协议(protocol)方法是ignoreusedownload。对于您要下载的任何 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/

相关文章:

ios - 为已经启动的 View Controller 执行带有标识符的 Segue

iphone - 如何将资源添加到 .bundle/wrapper.plug-in 中?

ios - 是否可以使用 Hackintosh 开发 iPhone 应用程序?

cocoa - 保留contentView并释放NSWindow

ios - 如何从 MWPhoto 对象中获取 UIImage?

linux - 使用 "read"设置变量

macos - 一天后 MySQL 查询仍在执行..?

objective-c - 向 Cocoa 应用程序添加帮助

objective-c - cocoa:如何重新打开关闭的窗口

iOS BLE 无葡萄糖测量通知