2017-09-28 80 views
1

我的应用程序使用WKWebView导航到移动网页。我在寻找的是如何检查网页是否可下载(例如.csv或.pdf)。现在,我正在做一些黑客来阅读URL,但我知道必须有更优雅的方式。如何使用WKWebView读取页面的MIME类型?

我正在使用WKNavigationDelegate - 任何人都可以提供一些有关如何判断一个页面是否提供可下载内容的信息?或者我如何阅读一种“文本/ csv”?

请让我知道,如果我可以澄清。

回答

1

您可以使用框架Swime。您可以使用这样的:

import Swime 

let path = "/path/to/some-file.jpg" 
let url = URL(fileURLWithPath: path, isDirectory: false) 
let data = try! Data(contentsOf: url) 
let mimeType = Swime.mimeType(data: data) 

mimeType?.type == .jpg // true 
mimeType! // MimeType(mime: "image/jpeg", ext: "jpg", type: .jpg) 

switch mimeType?.type { 
    case .jpg?: 
    .... 
    case .png?: 
    .... 
    case .wmv?: 
    .... 

    case ... 
} 

这里可MimeTypeExtension列表:

public enum MimeTypeExtension { 
    case amr 
    case ar 
    case avi 
    case bmp 
    case bz2 
    case cab 
    case cr2 
    case crx 
    case deb 
    case dmg 
    case eot 
    case epub 
    case exe 
    case flac 
    case flif 
    case flv 
    case gif 
    case gz 
    case ico 
    case jpg 
    case jxr 
    case lz 
    case m4a 
    case m4v 
    case mid 
    case mkv 
    case mov 
    case mp3 
    case mp4 
    case mpg 
    case msi 
    case mxf 
    case nes 
    case ogg 
    case opus 
    case otf 
    case pdf 
    case png 
    case ps 
    case psd 
    case rar 
    case rpm 
    case rtf 
    case sevenZ // 7z, Swift does not let us define enum that starts with a digit 
    case sqlite 
    case swf 
    case tar 
    case tif 
    case ttf 
    case wav 
    case webm 
    case webp 
    case wmv 
    case woff 
    case woff2 
    case xpi 
    case xz 
    case z 
    case zip 
} 
+0

感谢您的快速反应。这看起来像是假定该文件已经下载 - 你知道一种在WKWebView中使用页面做类似事情的方法吗?我想检查页面是否可下载,如果可以,请下载内容。那有意义吗? – ArielSD

+0

@ArielSD,现在我知道了。结帐[this](https://stackoverflow.com/a/40003309/5576310)然后发布。这是你需要的吗? –

+0

是的 - 这是我迄今为止最接近的,谢谢! – ArielSD

1

你应该能够检查响应和页面加载之前获得的MIME类型,使用webView(_:decidePolicyFor:decisionHandler:)方法您的WKNavigationDelegate

设置对象为navigationDelegate您WKWebView,并给它这样的方法:

func webView(_ webView: WKWebView, 
     decidePolicyFor navigationResponse: WKNavigationResponse, 
     decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) { 

    if let mimeType = navigationResponse.response.mimeType { 
     // do some thing with the MIME type 
    } else { 
     // response has no MIME type, do some special handling 
    } 
    decisionHandler(.allow) 
} 
+1

我的服务器端可能存在问题,因为即使该URL具有可下载的.csv,仍会记录“html/text”的mimeType。它通过后端路由。 – ArielSD

+1

@ArielSD你可以检查mimeType是否为“html/text”,url pathExtension ==“csv”https://stackoverflow.com/questions/36231061/wkwebview-open-links-from-certain-domain-in-safari /36231713?s=1|5.4860#36231713 –

+0

虽然这很好,但我们试过了:指向.csv的链接没有像这样的扩展名。 – ArielSD